我有一个字符串。为简单起见,它看起来像这样:
\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 "
答案 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");