c# - 多个字符串替换(在同一字符串内)

标签 c# string replace

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

\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/

相关文章:

python - 根据条件替换 Pandas Dataframe 中的值

r - 如何更改 NetCDF 中的经度范围

c# - Android 和 PC 之间的通信 (C#)

c - 分割键搜索

java - 如何转义json?

android - 如何清除蓝牙输入流缓冲区

linux - 在多个文件中查找并替换特定术语

c# - 如何在单个 SQL 连接中运行多个 SQL 命令?

c# - 找不到应用程序的入口点 : WebDev. WebServer40.EXE -

c# - 正则表达式以防止文本框接受电子邮件地址