我有一个字符串。为简单起见,它可能看起来像这样:
\r\n\r\n\r\n
它也可能有更多的出现 '\r\n' - 我只在这里发布最简单的问题。
我需要在每次出现的 '\r\n\r\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' 因为这会给我一个看起来像这样的字符串:
"5\r\n \r\n Test\t\n "
最佳答案
您可以使用向前看和向后看,以便您只匹配“之间”部分。
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”。
关于c# - 多个字符串替换(在同一字符串内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450444/