我有兴趣从一些类似于 this 的 PDF 文件中提取一些信息。 。我只需要第 2 页及其后的信息,如下所示:
- (U) 国家/地区:[日期][文本]。 (括号内的文字)
这意味着它始终以数字、点和国家/地区开头,并以括号结束,括号也可能进入下一行。
我在 python 中的实现如下:
- 使用pdfminer extract_text函数获取整个文本。
- 然后使用此正则表达式
^\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).*
匹配换行符,并且不仅断言换行符后面有空格
)*
关闭非捕获组并可选择重复
例如
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/