将多行正则表达式中的字符串替换为行尾令牌

时间:2013-03-10 20:06:41

标签: c# regex

我得到了以下正则表达式

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

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

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我不确定你想要实现什么,我想我明白了,你想要替换行尾的换行符。

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

你可以做其他不同的事情:

  1. 如果可以匹配所有后续换行符,也意味着所有后面的空行都可以执行此操作:

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

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

    这将与组合\n\r\n

  3. 相匹配