正则表达式删除带有换行符的页脚文本

本文关键字:文本 换行符 删除 正则表达式 | 更新日期: 2023-09-27 17:59:21

我希望这很简单...我正在尝试使用正则表达式从文本块中删除页脚,这包括两个初始换行符,这是我的问题所在。

    Message body blah blah balh
    {Line Break}
    {Line Break}
    ----------------------------------
    Custom footer text

我一直在尝试/'?('r'n)('r'n)([-{34}])/.*的变化,但没有任何效果。

正则表达式删除带有换行符的页脚文本

我做了一个测试,这有效:

['r'n]*-{34}['w's'n'r]*

代码如下:

var input = @"Message body blah blah balh

----------------------------------
Custom footer text";
var pattern = @"['r'n]*-{34}['w's'n'r]*";
var clean = Regex.Replace(input, pattern, "", RegexOptions.Multiline);
Console.WriteLine(clean);

输出是预期的:

Message body blah blah balh

最初的方法存在几个问题。abc667在上面的评论中指出了其中一些。

以下是另外两个:

  • 当你做('r'n)时,你期待确切的字符序列CR,LF。但是,在某些操作系统中,换行符只能由'n (LF( 表示。要使模式适用于这两种情况,您可以使用字符类,如下所示:['r'n]* 。这意味着:">您可以找到的所有'n和/或'r字符序列,以任何顺序"。

  • 点 ( . ( 匹配除 ' 之外的任何单个字符(请参阅文档(。在某些正则表达式风格中,它也可能在特殊条件下匹配换行符(请参阅此处的"(点("(,但在 .NET 中则不然。这就是为什么我将应该匹配虚线后所有内容的.*替换为['w's'r'n]*,该将匹配任何单词字符、空格字符、CR 和 LF。