正则表达式(C#):将\ n替换为\ r \ n

时间:2008-08-27 19:51:31

标签: c# regex

如何使用C#中的正则表达式将\ n的单个实例替换为\ r \ n(LF单独使用CRLF)?

对不起,如果这是一个愚蠢的问题,我是Regex的新手。

我知道要使用计划String.Replace来执行此操作,例如:

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

然而,这是不优雅的,并且会破坏文本中已经存在的任何“\ r + \ r \ n”(尽管它们可能不存在)。

7 个答案:

答案 0 :(得分:60)

如果你使用它可能会更快。

(?<!\r)\n

它基本上寻找任何\ n前面没有\ r的\ n。这很可能会更快,因为在另一种情况下,几乎每个字母都匹配[^ \ r],所以它会捕获它,然后在那之后寻找\ n。在我给出的示例中,它只会在找到\ n时停止,然后在它们之前查看它是否找到了\ r

答案 1 :(得分:44)

这会吗?

[^\r]\n

基本上它匹配前面带有'\ r'字符的'\ n'。

如果您希望它检测仅以单个'\ n'开头的行,请尝试

([^\r]|$)\n

其中说它应该与'\ n'匹配,但只有那些是行的第一个字符或的那个前面带'\ r'

可能有特殊情况需要检查,因为你弄乱了行本身的定义,'$'可能效果不好。但我认为你应该明白这一点。

编辑信用@Kibbee使用前瞻显然更好,因为它不会捕获匹配的前一个字符,并且也应该帮助处理任何边缘情况。所以这里有一个更好的正则表达式+代码变成:

myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");

答案 2 :(得分:12)

我试图将下面的代码用于字符串,但它无效。

myStr.Replace("(?<!\r)\n", "\r\n")

我使用了Regex.Replace并且它有效

Regex.Replace( oldValue, "(?<!\r)\n", "\r\n")

答案 3 :(得分:3)

我猜“myStr”是String类型的对象,在这种情况下,这不是正则表达式。 \ r和\ n是CR和LF的等价物。

我最好的猜测是,如果你知道你有一个\ n的EACH线,无论如何,那么你首先应该剥离每个\ r。然后用\ r \ n。

替换所有\ n 回答chakrit给出的答案也会消失,但是你需要使用正则表达式,但是因为你没有说“myStr”是什么......

编辑:看其他例子告诉我一件事......为什么做困难的事情,什么时候能做到容易?,因为有正则表达式,与“必须使用”不一样:D

Edit2:当摆弄正则表达式,xpath和诸如此类的东西时,一个工具非常有价值,可以指向你:http://www.regexbuddy.com/

答案 4 :(得分:1)

myStr.Replace("([^\r])\n", "$1\r\n");

$可能需要是\

答案 5 :(得分:1)

试试这个:替换(Char.ConvertFromUtf32(13),Char.ConvertFromUtf32(10)+ Char.ConvertFromUtf32(13))

答案 6 :(得分:1)

如果我知道行结尾必须是CRLF或LF之一,那么对我有用的是

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

这基本上做了相同的neslekkiM的答案,除了它只对字符串执行一次替换操作而不是两次。这也与不支持负面外观或反向引用的正则表达式引擎兼容。