题
我怎么可以取代孤独的实例 (如果单独与CRLF)使用一个定期表达的C#?
对不起如果这是一个愚蠢的问题,我是新来的Regex.
我知道这样做使用计划 String.Replace
, ,如:
myStr.Replace("\n", "\r\n");
myStr.Replace("\r\r\n", "\r\n");
然而,这是不优雅的,并将破坏任何" + "已经在案文中的(尽管他们不可能存在)。
解决方案
将这做什么?
[^\r]\n
基本上符合" "开头的字符,并不是' '。
如果你想要它来检测线,开始只是一个单一的" "为好,那就试试
([^\r]|$)\n
它说,它应该符合一个' '但只有那些是第一个角色的线或者那些 不 前面有' '
有可能是特殊情况下,检查自从你搞定义的行本身的'$'可能不太好。但我认为你应该得到的想法。
编辑: 信用@Kibbee使用先s显然是更好,因为它不会捕获的匹配的前的角色,并应帮助有任何边界情况。所以这里有一个更好的regex+代码变为:
myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");
其他提示
它可能是更快,如果你用这个。
(?<!\r)\n
它基本上是看起来的任何 ,是不是之前 。这将最有可能以更快的速度,因为在其他情况下,几乎每一个字母匹配[^ ],因此它将捕获的,然后看看 之后。在我给的例子,它只会停止的时候,它发现 和他们看看之前,要看到,如果它发现
我正试图做的代码如下来一串它不是工作。
myStr.Replace("(?<!\r)\n", "\r\n")
我用Regex.替代和它的工作
Regex.Replace( oldValue, "(?<!\r)\n", "\r\n")
我猜测,"myStr"是一个目的类型字符串,在这种情况下,这不是regex. 当量为CR和LF。
我最好的猜测是,如果你知道你有一种 每个线,不管是什么,那么你第一个应该带出每 。然后全部替换 .
答案chakrit给也会去的,但你需要使用regex,但是因为你不说什么"myStr"。
编辑:在其他例子告诉我一件事..为什么困难的事情,当你可以做到这轻松?, 因为没regex,是不一样的,因为"必须使用":D
Edit2:一工具是非常有价值的,当摆弄regex,xpath,和诸如此类的东西,让你奇怪的结果,我可以点你: http://www.regexbuddy.com/
myStr.Replace("([^\r])\n", "$1\r\n");
$可能需要进\
试试这个:替换(Char。ConvertFromUtf32(13),Char。ConvertFromUtf32(10)+Char。ConvertFromUtf32(13))
如果我知道的线路的结局必须是一个CRLF或如果,这对我的作品是
myStr.Replace("\r?\n", "\r\n");
这基本上是不一样的 neslekkiM's答案,除了其执行只有一个替代作串上,而不是两个。这也是兼容Regex发动机,不支持消极回顾或反向引用。