首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匹配数字和点序列?

如何匹配数字和点序列?
EN

Stack Overflow用户
提问于 2021-10-13 19:46:33
回答 3查看 111关注 0票数 0

我试图通过提取一个PDF文件来使用这个regex 2.1.34.5.1.来匹配这个字符串^((\d{1,2}.)*)。但是,我不能打印这个返回。这是输出pdf页面。

代码语言:javascript
复制
93

|
Page


1.5.4 Require Authentication for Single
-

这里所发生的,是匹配的是93而不是1.5.4

代码语言:javascript
复制
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))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-13 21:59:55

您的第一个示例2.1.34.5.1.以一个.结尾,而第二个1.5.4则没有。

不要忘记,为了匹配一个文字.,您可以用反斜杠来转义它。

为了确保序列中至少有一个.,使用+而不是*来匹配组至少一次。

代码语言:javascript
复制
^(?:\d{1,2}\.)+\d{0,2}
票数 1
EN

Stack Overflow用户

发布于 2021-10-13 19:55:53

试试这个:

代码语言:javascript
复制
(\d{1,2}.{0,1})*

你的问题是你的正则表达式最后需要一个点。

票数 0
EN

Stack Overflow用户

发布于 2021-10-14 11:15:42

^((\d{1,2}.)*)可以匹配93的原因是因为这个点不是转义的,因此也可以匹配一个数字。模式\d{1,2}.的这一部分至少匹配2个字符,最多匹配3个字符。

{1,2}允许回溯与9相匹配,但最后的点与3相匹配。例如,它不匹配一个数字。

由于可以选择使用*重复模式,所以它还可以匹配空字符串,或者在本例中匹配2位数字。

注意到{0,1}可以写成?

您还可以将模式编写为:

代码语言:javascript
复制
\d{1,2}(?:\.\d{1,2})+\.?

模式匹配:

  • \d{1,2}匹配1-2位数字
  • (?:非捕获组作为一个整体重复
    • \.\d{1,2}匹配点和1-2位数。

  • )+关闭非捕获组并至少重复1次,以不匹配没有点的数字。
  • \.?匹配一个可选点

Regex演示

使用带负值的空白边界来防止部分匹配:

代码语言:javascript
复制
(?<!\S)\d{1,2}(?:\.\d{1,2})+\.?(?!\S)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69561507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档