pdf文件中的多行正则表达式
Multiline regex in pdf file
我有兴趣从一些看起来像 this 的 PDF 文件中提取一些信息。我只需要第 2 页的信息,之后的信息如下所示:
- (U) 国家:[日期] [文本]。 (括号内的文字)
这意味着它总是以一个数字开始一个点一个国家并以方括号结束,方括号也可以转到下一行。
我在 python 中的实现如下:
- 使用pdfminer extract_text函数获取全文。
- 然后在整个文本中使用 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).*
匹配一个换行符,并且不仅断言空格后跟一个换行符
)*
关闭非捕获组并可选择重复
例如
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))
我有兴趣从一些看起来像 this 的 PDF 文件中提取一些信息。我只需要第 2 页的信息,之后的信息如下所示:
- (U) 国家:[日期] [文本]。 (括号内的文字)
这意味着它总是以一个数字开始一个点一个国家并以方括号结束,方括号也可以转到下一行。
我在 python 中的实现如下:
- 使用pdfminer extract_text函数获取全文。
- 然后在整个文本中使用 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
匹配空白字符 之间首次出现的 \d{1,2}\s
匹配 1-2 位数字和一个空格字符.*
匹配行的其余部分(?:
非捕获组\n(?![^\S\r\n]*\n).*
匹配一个换行符,并且不仅断言空格后跟一个换行符
)*
关闭非捕获组并可选择重复
on
例如
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))