替换多正则表达式的字符串与行令牌
问题描述:
末我得到了下面的正则表达式替换多正则表达式的字符串与行令牌
var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)$", "",
RegexOptions.Multiline);
不工作。它适用于如果我使用\r\n
,但我想支持所有类型的换行符。如another answer所述,我必须使用RegexOptions.Multiline
才能使用$
作为行尾标记(而不是字符串结尾)。但它似乎没有帮助。
我在做什么错?
答
我不确定你想达到什么,我想我明白了,你还想在行的末尾换掉换行符。
问题是$
是一个零宽度断言。它与换行符不匹配,它与\n
之前的位置相匹配。
你可以做其他不同的东西:
-
如果它是确定符合以下所有换行符,意味着还有以下所有的空行,你可以这样做:
var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)[\r\n]+", "");
-
如果您只想匹配行后的换行符并保留空行,则必须为所有可能的组合创建模式,例如:
var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)\r?\n", "");
这将组合
\n
和\r\n
匹配啊确定。我只是觉得'$'就像使用任何一种新的线组合一样。但是它跟任何NL字符后面的行尾相符,对吧? – jgauffin 2013-03-10 20:36:54
它匹配换行符之前的行尾,但只匹配该位置,不匹配任何字符。 – stema 2013-03-10 21:31:47