首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex前瞻性断言

regex前瞻性断言
EN

Stack Overflow用户
提问于 2017-12-31 14:39:14
回答 1查看 51关注 0票数 0

我对python很陌生,我正在学习展望断言。

我发现下面这个奇怪的地方。有人能告诉我它是怎么工作的吗?

代码语言:javascript
复制
import regex as re
re.search('(\d*)(?<=a)(\.)','1a.')
<regex.Match object; span=(2, 3), match='.'>

re.search('(\d+)(?<=a)(\.)','1a.')
out put nothing

为什么第二个不匹配?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-31 14:49:24

第一种模式:

代码语言:javascript
复制
re.search('(\d*)(?<=a)(\.)', '1a.')

表示查找零或更多位数,后面跟着一个点。就在点之前,它有一个正向后看,它断言前面的字符是一个a。在这种情况下,Python将匹配零位数,然后是一个点。lookbehind触发true,因为前面的字符实际上是一个a

然而,第二种模式是:

代码语言:javascript
复制
re.search('(\d+)(?<=a)(\.)','1a.')

匹配一个或多个数字,跟随查找和匹配点。在这种情况下,Python必须与1号匹配。但这样看来,背后一定会失败。显然,如果最后匹配的字符是数字,则不可能是字母a。因此,在第二种情况下是不可能匹配的。即使我们要从第二个模式中删除(?<=a),它仍然会失败,因为我们没有考虑到字母a

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48043337

复制
相关文章

相似问题

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