2016-04-06 253 views
3

我有一個字符串。爲簡單起見它可能看起來像這樣:多個字符串替換(在同一個字符串中)

\r\n\r\n\r\n 

它也可以有更多的事件「\ r \ n」 - 我只在這裏張貼的最簡單的問題。

我需要插入的「\ r \ n \ r \ N」每次出現時之間的空間對於上面的例子,我期望與看起來字符串落得像:

\r\n \r\n \r\n 

我CAN做到這一點使用下面的代碼(我不喜歡,因爲它爲了產生預期的結果,創造了很多的字符串):

string newString = "\r\n\r\n\r\n"; 
while (newString.Contains("\r\n\r\n")) 
     newString = newString.Replace("\r\n\r\n", "\r\n \r\n"); 

我有問題,嘗試使用或與string.replace找出一個正則表達式可以爲我做到這一點。

如果我嘗試使用與string.replace(甚至StringBuilder.Replace)是這樣的...

var result = "\r\n\r\n\r\n".Replace("\r\n\r\n", "\r\n \r\n"); 

我結束了

"\r\n \r\n\r\n" //There is no space between the last two carriage return/line feed 

我認爲,正則表達式替換可能做的伎倆,但我不知道如何讓正則表達式引擎做一個懶惰的匹配,以便在第一次替換後替換所有出現的\ r \ n。

我一直在搜索SO和谷歌試圖找到類似的問題,但還沒有出現任何使用。我提前道歉,如果這是重複的,但如果是,我找不到它!

因此,總之,我可以使用while循環來做到這一點,但我想知道是否有更優雅的解決方案?

編輯

對不起 - 有更多的這一點: 我的代碼還可以查看一個字符串,它看起來像這樣:

5\r\n\r\nTest\r\n 

在這種情況下,我希望看到看起來像這樣的字符串:

5\r\n \r\nTest\r\n 

所以 - 我不想只是替換 '\ r \ n' 與 '\ r \ n',因爲這WOU ld給我一個字符串,看起來像lke:

"5\r\n \r\n Test\t\n " 
+0

可以試試newString = newString.Replace(「\ r \ n」,「\ r \ n」).Trim(); ? –

+0

對不起 - 添加更多的細節,因爲我意識到我已經省略了我的問題的重要部分。 – Jay

回答

4

你可以使用前視和後視,以便只匹配「之間」部分。

string test = "\r\n\r\n\r\n"; 
Regex reg = new Regex("(?<=\r\n)(?=\r\n)"); 
test = reg.Replace(test, " "); 

,這將導致test是 「\ r \ n \ r \ n \ r \ n」。

+0

剛把這個寶貝插入我的單元測試中,第一次通過......謝謝! – Jay

-1
"\r\n\r\n\r\n".Replace("\n\r", "\n \r"); 
+0

對不起 - 請參閱我對qquestion的編輯 - 這不是我想要做的 – Jay

+0

這是過度簡化。像「\ n \ r」這樣的字符串不應該根據OP的要求獲得插入的空間。 – juharr

+0

Juharr,「\ n \ r」可以用作變量。這僅僅是一個例子。 –

相關問題