我试图通过提取一个PDF文件来使用这个regex 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))发布于 2021-10-13 21:59:55
您的第一个示例2.1.34.5.1.以一个.结尾,而第二个1.5.4则没有。
不要忘记,为了匹配一个文字.,您可以用反斜杠来转义它。
为了确保序列中至少有一个.,使用+而不是*来匹配组至少一次。
^(?:\d{1,2}\.)+\d{0,2}发布于 2021-10-13 19:55:53
试试这个:
(\d{1,2}.{0,1})*你的问题是你的正则表达式最后需要一个点。
发布于 2021-10-14 11:15:42
^((\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://stackoverflow.com/questions/69561507
复制相似问题