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

标签 python regex pdf

我有兴趣从一些类似于 this 的 PDF 文件中提取一些信息。 。我只需要第 2 页及其后的信息,如下所示:

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

这意味着它始终以数字、点和国家/地区开头,并以括号结束,括号也可能进入下一行。

我在 python 中的实现如下:

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

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

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

提前致谢。

最佳答案

您可以使用否定字符类匹配来更新模式,直到第一次出现 :,然后至少匹配其后的 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))

关于python - pdf文件中的多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69860495/

相关文章:

python - Nginx + Gunicorn + Flask --> 使用 X 小时后常有 500 个错误

python - BeautifulSoup : Parsing only one element

javascript - 正则表达式 "AND"

javascript - 如何调整谷歌地图的宽度和高度

r bookdown pdf 格式不起作用

html - 如何使 PDF 输出看起来与 HTML 输出完全一样

python - 使用 django.contrib.auth 限制对 Ajax 服务的访问

javascript - 有没有办法使用正则表达式来执行相同的图像交换功能,而不管扩展名如何?

Java String.getBytes() 问题

python - 如何从 Python 将 "dot"作为命令运行?