正则表达式(C#):将\ n替换为\ r \ n
如何在C#中使用正则表达式将\ n的单个实例替换为\ r \ n(对于CRLF仅使用LF)?
抱歉,这是一个愚蠢的问题,我是Regex的新手。
我知道使用计划String.Replace
来做到这一点,例如:
myStr.Replace("\n", "\r\n"); myStr.Replace("\r\r\n", "\r\n");
但是,这很不雅致,并且会破坏文本中已经存在的所有" \ r + \ r \ n"(尽管它们不太可能存在)。
解决方案
回答
这样可以吗
[^\r]\n
基本上,它匹配以'\ n'开头的字符,而不是'\ r'。
如果我们希望它也检测以单个'\ n'开头的行,请尝试
([^\r]|$)\n
表示应与" \ n"匹配,但仅与行首字符匹配或者与" \ r"不匹配的匹配
可能有一些特殊情况需要检查,因为我们搞砸了行本身的定义,因此'$'可能无法很好地工作。但我认为我们应该明白这一点。
编辑:信用@Kibbee使用look-ahead显然更好,因为它不会捕获匹配的前一个字符,并且也应有助于处理任何边缘情况。因此,这里有一个更好的正则表达式+代码变为:
myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");
回答
我猜想" myStr"是String类型的对象,在这种情况下,这不是正则表达式。
\ r和\ n是CR和LF的等效项。
我最好的猜测是,如果我们知道每个行都有\ n,无论如何,那么我们首先应该删除每个\ r。然后将所有\ n替换为\ r \ n。
chakrit提供的答案也可以,但是随后我们需要使用正则表达式,但是由于我们没有说" myStr"是什么...
编辑:看另外一个例子可以告诉我一件事..为什么困难的事情,什么时候可以轻松做到呢?,因为有正则表达式,所以与"必须使用"不同:D
Edit2:当使用regex,xpath之类的工具时,它是非常有价值的。
回答
myStr.Replace("([^\r])\n", "\r\n");
$可能需要为\
回答
如果使用它,可能会更快。
(?<!\r)\n
它基本上会查找没有\ r的任何\ n。这很有可能会更快,因为在另一种情况下,几乎每个字母都匹配[^ \ r],因此它将捕获该字母,然后在其后查找\ n。在我给出的示例中,它只会在找到\ n时停止,然后他们再看是否找到\ r