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