我正在嘗試通過提取 PDF 檔案2.1.34.5.1.使用此正則運算式匹配此字串^((\d{1,2}.)*)。但是,我無法列印此退貨。這是輸出的pdf頁面。
93
|
Page
1.5.4 Require Authentication for Single
-
這里發生了什么,匹配的是93相反的1.5.4.
import PyPDF2
import re
import sys
if __name__ == '__main__':
pdf_file = open('RH5-94.pdf','rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
IdCis = "(\d{1,2}.{0,1})*"
Description = "(?<=Description:)(.*)(?=Rationale)"
Rationale = "(?<=Rationale:)(.*)(?=Audit)"
textPage = read_pdf.getPage(0).extractText()
print(re.search(IdCis,textpage).group(0))
uj5u.com熱心網友回復:
您的第一個示例2.1.34.5.1.以 a 結尾,.而您的第二個示例1.5.4則不是。出于這個原因,我假設序列可能會或可能不會以.
不要忘記匹配一個文字,.你用反斜杠轉義它。
為了確保.序列中至少有一個, 而不是*用于匹配組至少一次。
^(?:\d{1,2}\.) \d{0,2}
uj5u.com熱心網友回復:
嘗試這個:
(\d{1,2}.{0,1})*
你的問題是你的正則運算式最后需要一個點
uj5u.com熱心網友回復:
之所以^((\d{1,2}.)*)可以匹配 93 是因為點沒有轉義,因此也可以匹配數字。模式的這一部分\d{1,2}.至少匹配 2 個字符,最多匹配 3 個字符。
的{1,2}允許回溯以匹配9只有在端部匹配3.將不匹配,例如一個數字的點。
由于模式可以選擇重復使用,*它也可以匹配空字串,或者在這種情況下是 2 位數字。
注意這{0,1}可以寫成?
您也可以將模式寫為:
\d{1,2}(?:\.\d{1,2}) \.?
模式匹配:
\d{1,2}匹配 1-2 位數字(?:非捕獲組作為一個整體重復\.\d{1,2}匹配一個點和 1-2 位數字
)關閉非捕獲組并重復至少 1 次以匹配不帶點的數字\.?匹配一個可選的點
正則運算式演示
使用帶有負面環視的空白邊界來防止部分匹配:
(?<!\S)\d{1,2}(?:\.\d{1,2}) \.?(?!\S)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316097.html
