Python regex lookbehind不一致?

2024-05-14 00:17:42 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行以下代码时:

进口re

s = 'baaaad'

l = re.findall(r'((a)(?=a))', s)
print l
for elem in l:
    print ''.join(elem)

我得到输出:

[('a','a'),('a','a'),('a','a')] aa级 aa级 aa级

正如所料。但当我尝试相应的策略时,即:

s = 'baaaad'

l = re.findall(r'((?<=b)(a))', s)
    print l
for elem in l:
    print ''.join(elem)

我得到:

[('a','a')] aa级

我希望得到:

[('b','a')] 文学学士

为什么这(对我来说)是意想不到的行为?如果我做错了什么?如何修复

谢谢


Tags: 代码inrefor策略aaprintjoin
1条回答
网友
1楼 · 发布于 2024-05-14 00:17:42

您似乎认为输出中的一个组来自(a),另一个来自lookahead或lookback。事实并非如此。其中一个组是(a),另一个来自整个正则表达式周围的括号:

 v    v not these
((?<=b)(a))
^         ^ these

向前看不匹配a,向后看不匹配b。它们匹配字符串中出现a之后或出现b之前的位置。它们与任何实际字符都不匹配。因此,您的两个正则表达式都只匹配a,并限制可能在前面或后面出现的内容,并且两个正则表达式中的两个捕获组都只捕获a

相关问题 更多 >