将多行正则表达式中的字符串替换为行结束标记

本文关键字:结束 替换 正则表达式 字符串 | 更新日期: 2023-09-27 18:03:18

我得到了以下regex

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

不起作用。如果我使用'r'n,它可以工作,但我想支持所有类型的换行符。正如另一个答案所述,我必须使用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的组合