2016-08-11 60 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正則表達式中的特殊字符。 –

相關問題