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

时间:2013-02-14 12:23:19

标签: c# regex

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

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

我一直在试验/\?(\r\n)(\r\n)([-{34}])/.*的各种变体,但没有任何效果。

1 个答案:

答案 0 :(得分:3)

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

[\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字符的所有序列”

  • 点(.)匹配除\ n之外的任何单个字符(请参阅docs)。在某些正则表达式中,它也可以在特殊条件下匹配换行符(请参阅“(点)”here),但不能在.NET中匹配。这就是为什么我将.*替换为符合[\w\s\r\n]*的虚线后面的所有内容,以匹配任何单词字符,空格字符,CR和LF。