某不知名人士 2024-02-18 16:03 采纳率: 92%
浏览 4
已结题

正则表达式python

划红线的第1处(?:-\d{2})为什么要这么写呢?我写成\d{2}-\d{2}找不到任何内容,还有就是划红线的第2处的{2}的是表示(?:-\d{2})至少 要出现两次吗?

因为我是自学,在平台上做题,但是平台没有相应的知识点,所以都是去网上看我在做题过程中没怎么用到compile函数,这个函数在正则表达式中需要用到吗?我看的资料中有出现过这个函数,但好像只是一种要查找内容的定义,我做了十题左右,大部分用的是
findall()和search()

img


题目答案,所需效果

img

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-18 16:07
    关注

    该回答引用自GPT-3.5,由博主GIS_Liu编写:

    针对你提出的问题,我来逐个解答:

    1. 第1处的正则表达式 (?:-\d{2}) 中的 (?:) 是一个非捕获组,它表示这部分匹配不会被捕获到作为结果的一部分。在这个表达式中,(?:-\d{2}) 匹配一个减号后面跟着两个数字的模式,但不会将减号和数字作为结果捕获。因此,它可能是为了在匹配时忽略减号,只匹配数字部分。而你提到的 \d{2}-\d{2} 则表示匹配两个数字后跟着一个减号,再跟着两个数字的模式,这与你想要匹配的模式可能不太一样。

    2. 关于第2处的 {2},它表示前面的表达式(这里是 (?:-\d{2}))必须恰好重复出现两次。在这里,(?:-\d{2}){2} 表示匹配两次 - 后跟着两个数字的模式。如果你想要至少出现两次的话,可以使用 {2,} 表示至少重复两次。

    3. 关于 compile 函数,它在正则表达式中并不是必须的,但它可以将正则表达式编译为一个可重用的对象,这样在多次使用同一个表达式时可以提高效率。使用 compile 编译后的正则对象可以通过 findall()search() 等方法进行匹配,功能上与直接使用正则表达式是一样的。

    综上所述,你可以尝试使用 (?:-\d{2}){2} 这样的正则表达式来匹配你想要的模式,并考虑使用 compile 函数来提高匹配效率。

    img

    如果该回答解决了您的问题,请采纳!如果没有,请详述问题所在!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 创建了问题 2月18日