2

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

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

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

4

1 回答 1

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 之外的任何单个字符(请参阅文档)。在某些正则表达式风格中,它也可能在特殊条件下匹配换行符(请参阅此处的“(点)” ),但在 .NET 中则不匹配。这就是为什么我用将匹配任何单词字符、空格字符、CR 和 LF的.*那个替换了应该匹配虚线之后的所有内容的原因。[\w\s\r\n]*

于 2013-02-14T12:42:53.290 回答