pdf文件中的多行正则表达式

Multiline regex in pdf file

我有兴趣从一些看起来像 this 的 PDF 文件中提取一些信息。我只需要第 2 页的信息,之后的信息如下所示:

  1. (U) 国家:[日期] [文本]。 (括号内的文字)

这意味着它总是以一个数字开始一个点一个国家并以方括号结束,方括号也可以转到下一行。

我在 python 中的实现如下:

  1. 使用pdfminer extract_text函数获取全文。
  2. 然后在整个文本中使用 re.findall 函数,使用此正则表达式 ^\d{1,2}\. \(u\) \w+.\w*.\w*:.* on \d{1,2} \w+.*$ 和 re.MULTILINE 选项。

我注意到这提取了我感兴趣的所有段落的第一行,但我找不到一种方法来获取所有内容,直到段落结尾即方括号 (.*)。

我想知道是否有人可以为此提供一些帮助。我希望我只能通过一个正则表达式来匹配它。否则我可能会尝试按行拆分并遍历每一行。

提前致谢。

您可以使用否定字符 class 匹配更新模式,直到 : 第一次出现,然后在它之后至少匹配 on

要匹配所有后续行,您可以匹配一个换行符并断言下一行不只包含空格后跟一个换行符,使用否定先行。

使用不区分大小写的匹配:

^\d{1,2}\.\s\(u\)\s[^:\n]*:.*?\son\s\d{1,2}\s.*(?:\n(?![^\S\r\n]*\n).*)*

模式匹配:

  • ^ 字符串开头
  • \d{1,2}\.\s\(u\)\s 匹配 2 个数字,. 一个空白字符和 (u)
  • [^:\n]*: 匹配除 : 以外的任何字符或换行符,然后匹配 :
  • .*?\son\s 匹配空白字符
  • 之间首次出现的 on
  • \d{1,2}\s 匹配 1-2 位数字和一个空格字符
  • .* 匹配行的其余部分
  • (?:非捕获组
    • \n(?![^\S\r\n]*\n).* 匹配一个换行符,并且不仅断言空格后跟一个换行符
  • )* 关闭非捕获组并可选择重复

Regex demo

例如

pattern = r"^\d{1,2}\.\s\(u\)\s[^:]*:.*?\son\s\d{1,2}\s.*(?:\n(?![^\S\r\n]*\n).*)*"

print(re.findall(pattern, extracted_text, re.M | re.I))