我怎么可以取代孤独的实例 (如果单独与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发动机,不支持消极回顾或反向引用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top