2016-08-11 61 views
0
Membernumber350005Calculationdate04/08/2015Casenumber880898Case0.12Amount546.3Fors 

这里是一个包含单词和数字(包括日期和小数格式)的字符串,它们之间没有空格。我想给词和数字之间留出空间。我的输出应该是一个字符串不是一个数组,这应该是这样..使用RegEx替换函数(C#)在字符串中提供空格字符和数字之间的空格

Membernumber 350005 Calculationdate 04/08/2015 Casenumber 880898 Case 0.12 Amount 546.3 Fors 

我尝试下面的代码。我成功地过滤了日期和小数格式,并给他们留下了空间。但我被困在为这些单词提供空间。

string s = "Membernumber350005Calculationdate04/08/2015Casenumber880898Case0.12Amount546.3Fors"; 
string SpaceAroundDate = Regex.Replace(s, @"(\d+/\d+/\d+)", @" $1 "); 
string SpaceAroundDecimal = Regex.Replace(SpaceAroundDate, @"(\d+\.\d+)", @" $1 "); 

有了这个代码,我可以做这个,

Membernumber35000520Calculationdate 04/08/2015 Casenumber880898Case 0.12 Amount 546.3 fors 

然后我写了这个给文字和数字之间的空间,

string SpaceAroundWord = Regex.Replace(SpaceAroundDecimal, @"([A-Za-z]\w+)([0-9]\d+)([A-Za-z]\w+)", @"$1 $2 $3"); 

但事实并非如此工作。希望我已经提供了足够的信息。提前致谢。

+0

如果没有混合格式的日期和浮筒,你可以试试'Regex.Replace(S,@“\ d {2}/\ d {2}/\ d {4} | \ d +(?:\。\ d +)?“,”$&“)'。 [Demo here](http://regexstorm.net/tester?p=%5cd%7b2%7d%2f%5cd%7b2%7d%2f%5cd%7b4%7d%7c%5cd%2b(%3f%3a %5c所示。%5CD%2b)的%3F与I = Membernumber350005Calculationdate04%2f08%2f2015Casenumber880898Case0.12Amount546.3Fors&R = +%24%26 +)。 –

回答

0

在这里你去

string input = @"Membernumber350005Calculationdate04/08/2015Casenumber880898Case0.12Amount546.3Fors"; 
string result = Regex.Replace(input, @"([a-zA-Z]+|[0-9]+[0-9/\.]+[0-9]+)", "$& "); 
+0

澄清:'/'是一个文字'/'。为了逃避一个特殊的字符,你需要一个*反斜杠*'''''。你不需要在字符类中转义'.'来表示一个文字'.'。此外,这个正则表达式将用空格包含任何'.'和'/'符号,不仅包括日期和数字。 –

+0

@WiktorStribiżew现在确定日期/时间/数量必须以数字开头和结尾 – fubo

+0

捕获组在这里是多余的,您自己没有使用它,因为'$ 0'指的是整个匹配(我宁愿使用' $&',但似乎'$ 0'也适用)。另外,你不需要转义'/',因为它不是.NET正则表达式中的特殊字符。 –

相关问题