积极向后看vs不自拍组:不同的行为

apl*_*vin 5 python regex lookbehind capturing-group

re在代码中使用python正则表达式(模块),并注意到在这些情况下的不同行为:

re.findall(r'\s*(?:[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # non-capturing group
# results in ['a) xyz', ' b) abc']
Run Code Online (Sandbox Code Playgroud)

re.findall(r'\s*(?<=[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # lookbehind
# results in ['a', ' xyz', ' b', ' abc']
Run Code Online (Sandbox Code Playgroud)

我需要得到的就是正义['xyz', 'abc']。为什么示例的行为有所不同,又如何获得期望的结果?

Ani*_*dha 5

究其原因a,并b包含在第二种情况下是因为(?<=[a-z]\)) 首先发现a)和自环视的不消耗任何字符你回来在string.Now开始[^.)]+比赛a

现在您在)。由于您进行了(?<=[a-z]\))可选[^.)]+比赛xyz

重复同样的事情 b) abc

?从第二种情况中删除,您将获得预期的结果,即['xyz', 'abc']