Python 正则表达式前瞻断言
我是python正则表达式的新手,正在学习前瞻断言 我发现下面这句话很奇怪。有人能告诉我它是怎么工作的吗Python 正则表达式前瞻断言,python,regex,Python,Regex,我是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 将regex作为re导入 重新搜索('(\d*)(?第一个模式:
import regex as re
re.search('(\d*)(?<=a)(\.)','1a.')
<regex.Match object; span=(2, 3), match='.'>
re.search('(\d+)(?<=a)(\.)','1a.')
out put nothing
将regex作为re导入
重新搜索('(\d*)(?第一个模式:
re.search('(\d*)(?<=a)(\.)', '1a.')
匹配一个或多个数字,后跟查找和匹配点。在本例中,Python被迫匹配数字1
。但是,查找必须失败。显然,如果匹配的最后一个字符是数字,它不能是字母a
。因此,第二种情况下不可能匹配。即使我们是删除(?这里唯一的区别是*
(0次或更多次出现)和+
(1次或更多次出现)量词。我认为匹配的原则是逐个测试这些模式。例如1
匹配(\d+
,a
匹配(?现在我认为原因可能是表达式无法返回
,因为它想返回1
,因为(\d+)
并且它想同时返回
,因为在
之前有一个a
,所以表达式尝试1.
但是它不能这样做,因为1
和
没有链接在一起。所以它根本不返回任何内容。它匹配一个数字1
,但随后会碰到一个lookbehind在点之前,坚持一个a
出现在它之前。显然这失败了,更糟糕的是,那里有一个实际的字母a
,它与任何东西都不匹配。re.search('(\d*)(?)?
re.search('(\d+)(?<=a)(\.)','1a.')