我有興趣從一些看起來像這樣的PDF 檔案中提取一些資訊。我只需要第 2 頁的資訊,之后看起來像這樣:
- (U) 國家:在 [日期] [文本]。(括號內的文字)
這意味著它總是以一個數字開始,一個點一個國家,并以括號結束,括號也可以轉到下一行。
我在python中的實作如下:
- 使用 pdfminer extract_text 函式獲取整個文本。
- 然后使用
^\d{1,2}\. \(u\) \w .\w*.\w*:.* on \d{1,2} \w .*$帶有 re.MULTILINE 選項的正則運算式在整個文本中使用 re.findall 函式。
我注意到這提取了我感興趣的所有段落的第一行,但是我無法找到一種方法來獲取所有內容,直到段落末尾(括號 (.*))。
我想知道是否有人可以為此提供一些幫助。我希望我只能通過一個正則運算式來匹配它。否則我可能會嘗試按行拆分它并遍歷每個。
提前致謝。
uj5u.com熱心網友回復:
您可以使用否定字符類匹配來更新模式,直到第一次出現 ,:然后至少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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351194.html
