当我运行以下代码时:
进口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')] 文学学士
为什么这(对我来说)是意想不到的行为?如果我做错了什么?如何修复
谢谢
您似乎认为输出中的一个组来自
(a)
,另一个来自lookahead或lookback。事实并非如此。其中一个组是(a)
,另一个来自整个正则表达式周围的括号:向前看不匹配
a
,向后看不匹配b
。它们匹配字符串中出现a
之后或出现b
之前的位置。它们与任何实际字符都不匹配。因此,您的两个正则表达式都只匹配a
,并限制可能在前面或后面出现的内容,并且两个正则表达式中的两个捕获组都只捕获a
相关问题 更多 >
编程相关推荐