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