替换多正则表达式的字符串与行令牌

问题描述:

末我得到了下面的正则表达式替换多正则表达式的字符串与行令牌

var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)$", "", 
                 RegexOptions.Multiline); 

不工作。它适用于如果我使用\r\n,但我想支持所有类型的换行符。如another answer所述,我必须使用RegexOptions.Multiline才能使用$作为行尾标记(而不是字符串结尾)。但它似乎没有帮助。

我在做什么错?

我不确定你想达到什么,我想我明白了,你还想在行的末尾换掉换行符。

问题是$是一个零宽度断言。它与换行符不匹配,它与\n之前的位置相匹配。

你可以做其他不同的东西:

  1. 如果它是确定符合以下所有换行符,意味着还有以下所有的空行,你可以这样做:

    var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)[\r\n]+", ""); 
    
  2. 如果您只想匹配行后的换行符并保留空行,则必须为所有可能的组合创建模式,例如:

    var fixedString = Regex.Replace(subject, @"(:[\w]+ [\d]+)\r?\n", ""); 
    

    这将组合\n\r\n

+0

匹配啊确定。我只是觉得'$'就像使用任何一种新的线组合一样。但是它跟任何NL字符后面的行尾相符,对吧? – jgauffin 2013-03-10 20:36:54

+0

它匹配换行符之前的行尾,但只匹配该位置,不匹配任何字符。 – stema 2013-03-10 21:31:47