多个字符串替换(在同一个字符串中)

时间:2016-04-06 11:56:21

标签: c# string replace

我有一个字符串。为简单起见,它看起来像这样:

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

它可能会出现更多'\ r \ n' - 我只是在这里发布最简单的问题。

我需要在'\ r \ n \ n \ n \ n'每次出现之间插入一个空格。对于上面的示例,我希望最终得到一个看起来像这样的字符串:

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

我可以使用以下代码执行此操作(我不喜欢它,因为它会产生大量字符串以产生预期结果):

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',因为这会给我一个看起来像lke的字符串:

"5\r\n \r\n Test\t\n "

2 个答案:

答案 0 :(得分:4)

您可以使用前瞻并向后看,以便您只匹配"之间的#34;一部分。

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

这将导致test成为&#34; \ r \ n \ r \ n \ r \ n&#34;。

答案 1 :(得分:-1)

"\r\n\r\n\r\n".Replace("\n\r", "\n \r");