如何使用C#中的正则表达式将\ n的单个实例替换为\ r \ n(LF单独使用CRLF)?
对不起,如果这是一个愚蠢的问题,我是Regex的新手。
我知道要使用计划String.Replace
来执行此操作,例如:
myStr.Replace("\n", "\r\n");
myStr.Replace("\r\r\n", "\r\n");
然而,这是不优雅的,并且会破坏文本中已经存在的任何“\ r + \ r \ n”(尽管它们可能不存在)。
答案 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的答案,除了它只对字符串执行一次替换操作而不是两次。这也与不支持负面外观或反向引用的正则表达式引擎兼容。