如何使用C#中的正则表达式将\n的单个实例替换为\ r \n(LF单独使用CRLF)?
对不起,如果这是一个愚蠢的问题,我是Regex的新手.
我知道要用计划来做String.Replace
,比如:
myStr.Replace("\n", "\r\n");
myStr.Replace("\r\r\n", "\r\n");
Run Code Online (Sandbox Code Playgroud)
然而,这是不优雅的,并且会破坏文本中已经存在的任何"\ r +\r \n"(尽管它们不太可能存在).
Kib*_*bee 62
如果你使用它可能会更快.
(?<!\r)\n
Run Code Online (Sandbox Code Playgroud)
它基本上寻找任何\n前面没有\ r的\n.这很可能会更快,因为在另一种情况下,几乎每个字母都匹配[^\r],所以它会捕获它,然后在那之后寻找\n.在我给出的示例中,它只会在找到\n时停止,然后在它们之前查看它是否找到了\ r
cha*_*rit 44
这会吗?
[^\r]\n
Run Code Online (Sandbox Code Playgroud)
基本上它匹配一个前面带有'\ r'字符的'\n'.
如果你想要检测只以一个'\n'开头的行,那么试试吧
([^\r]|$)\n
Run Code Online (Sandbox Code Playgroud)
这表示它应匹配'\n',但只匹配一行的第一个字符或那些不带'\ r'的字符
可能有特殊情况需要检查,因为你弄乱了行本身的定义,'$'可能效果不好.但我认为你应该明白这个想法.
编辑:信用@Kibbee使用前瞻显然更好,因为它不会捕获匹配的前面的字符,并且也应该帮助任何边缘情况.所以这里是一个更好的正则表达式+代码变成:
myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");
Run Code Online (Sandbox Code Playgroud)
wan*_*ted 12
我试图将下面的代码写成一个字符串,但它无法正常工作.
myStr.Replace("(?<!\r)\n", "\r\n")
Run Code Online (Sandbox Code Playgroud)
我使用Regex.Replace并且它有效
Regex.Replace( oldValue, "(?<!\r)\n", "\r\n")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76147 次 |
最近记录: |