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']。为什么示例的行为有所不同,又如何获得期望的结果?
究其原因a,并b包含在第二种情况下是因为(?<=[a-z]\)) 首先发现a)和自环视的不消耗任何字符你回来在string.Now开始[^.)]+比赛a
现在您在)。由于您进行了(?<=[a-z]\))可选[^.)]+比赛xyz
重复同样的事情 b) abc
?从第二种情况中删除,您将获得预期的结果,即['xyz', 'abc']