我对python很陌生,我正在学习展望断言。
我发现下面这个奇怪的地方。有人能告诉我它是怎么工作的吗?
import regex as re
re.search('(\d*)(?<=a)(\.)','1a.')
<regex.Match object; span=(2, 3), match='.'>
re.search('(\d+)(?<=a)(\.)','1a.')
out put nothing为什么第二个不匹配?
发布于 2017-12-31 14:49:24
第一种模式:
re.search('(\d*)(?<=a)(\.)', '1a.')表示查找零或更多位数,后面跟着一个点。就在点之前,它有一个正向后看,它断言前面的字符是一个a。在这种情况下,Python将匹配零位数,然后是一个点。lookbehind触发true,因为前面的字符实际上是一个a。
然而,第二种模式是:
re.search('(\d+)(?<=a)(\.)','1a.')匹配一个或多个数字,跟随查找和匹配点。在这种情况下,Python必须与1号匹配。但这样看来,背后一定会失败。显然,如果最后匹配的字符是数字,则不可能是字母a。因此,在第二种情况下是不可能匹配的。即使我们要从第二个模式中删除(?<=a),它仍然会失败,因为我们没有考虑到字母a。
https://stackoverflow.com/questions/48043337
复制相似问题