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*)(?第一个模式:

我是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*)(?第一个模式:

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.')