正则表达式 - 查找匹配后的所有行:

3
在电子邮件正文中给出以下文本:

请勿修改上面的主题行。发送此电子邮件表示我请求推迟向9001(Qwest)分发此产品更改通知(PCN)。提供了以下原因:

这就是我需要捕获的原因。

它可能有很多行。

并且会持续很长时间

我正在尝试捕获跟随“... is provided below:”之后的所有文本。

传递到BodyRegex中的模式为:

.*provided below:(?<1>.*)

正在执行的代码是:
Regex regex2 = new Regex(BodyRegex, RegexOptions.IgnoreCase | RegexOptions.Multiline);
string note = null;
Match m2 = regex2.Match(body);
if (m2.Success)
{
    note = m2.Groups[1].Value;
}

找不到匹配项。

我需要使用什么匹配模式来捕获“下面提供:”后面的所有文本行?

2个回答

5

这里的“(?...)”是向前查找语法,不是你想要的。

你可能需要尝试使用向后查找:

(?<=provided below:)[.|\n|\W|\w]*

我曾遇到过.NET在使用.*时不能像预期的那样识别换行符的问题,因此需要加上or条件。


@JTC . 包含 \W \w.. 不需要 \W \w \n - Anirudha
那就是我的观点。它的行为并不相同。我放弃的那个引用是承认它是有缺陷的逻辑,但这仍然是我的经验。 - jTC
方括号内不需要使用“|”,因为方括号本身已经对其中的每个字符进行了逻辑或运算。 - jpenna

3

使用此正则表达式时,需要启用 单行模式

^.*?provided below:(.*?)$

点击这里查看工作情况。


如果您在使用 RegexOptions.Multiline 时遇到困难,可以通过内联选项切换到 Singleline 模式:(?-m:(?s:^.*?provided below:(.*?)$)) - agentnega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接