1

我正在尝试从包含使用正则表达式的几篇文章的文件中提取场地。我知道场地以 For/From 开头,然后是日期,该日期以一周中的某一天开头,如果缺少日期,则以作者姓名开头,我编写了以下正则表达式来匹配场地,但它始终匹配所有内容,直到作者的名字,这意味着如果该文章有日期,日期也会出现在场地中。

"""((?<=\n)(?:(?:\bFrom\b)|(?:\bFor\b)).*?(?=(?:(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)|(?:[A-Z]+))))""".r

如果遇到我的代码为什么不匹配日期,而是继续匹配作者姓名 [AZ]。

输入:“国家间敌对行动的后果

来自纽约邮报。

1787 年 11 月 20 日,星期二。

汉密尔顿

致纽约州人民:”

“1787 年 11 月 20 日,星期二”这一行。是可选的,可能不会出现在所有文章中。我希望输出为“来自纽约邮包”。对于没有日期的文章,我得到了正确的输出,但是我得到了“来自纽约邮包”的输出。

1787 年 11 月 20 日,星期二。”查看包含日期的文章。

4

2 回答 2

0

根据您的编辑,您真正需要的是

^(From|For).*

带有多行标志。


我知道场地以 For/From 开头

后跟以星期几开头的日期或作者姓名(如果缺少日期)

它总是匹配直到作者姓名的所有内容,这意味着如果该文章有日期,日期也会出现在场地中。

听起来您想在以“From”或“For”开头的文本文件中查找整行

^(From|For)

(设置多行标志以^匹配行的开头而不是输入的开头)。

后跟一个可选日期

\s+(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)?

后跟作者姓名

\s+\w+\s+\w+

紧随其后,直到行尾

.*

除非,当然,您的意思是要跳过日期并仅匹配 For/From 和作者姓名(而不是日期)。这不能仅在 Regex 中完成 - 不过,您可以使用分组来提取所需的值。

于 2013-02-07T21:18:07.243 回答
0

您只需要捕获以 For 或 From 开头的整行,因此您可以简单地使用它:

^(For|From).*$

^ 和 $ 将匹配锚定到行的开头和结尾,而 .* 匹配中间的所有内容。

在这里,用您喜欢的任何示例进行尝试。

如果这需要更复杂,我会更新我的答案。

于 2017-06-06T17:11:18.177 回答