正则表达式贪婪模式的一些疑问?

import re  
  
text = "aoooooooabbbboooooaabaabay1111"  
find_arr = re.findall(r".*(a.*a).*", text)  
find_arr2 = re.findall(r"aa", text)  
print(find_arr)  
print(find_arr2)

输出:
['aba']
['aa', 'aa']

为什么find_arr2可以匹配到text文本的所有的相关项,
而find_arr只匹配到了text最后一个相关项?
aoooooooa和aa不也符合find_arr正则吗,
我理解的贪婪模式应该aoooooooabbbboooooaabaaba都能匹配到,
不知道是哪里理解有问题?

阅读 1.9k
2 个回答

.*(a.*a).* 第一个 .* 就是贪婪匹配
所以 .* 实际匹配 aoooooooabbbboooooaaba(a.*a) 实际匹配的是最后面的3个字母 aba

你想要的要改成 .*?(a.*a).*?

r".*(a.*a).*"
  ^^

第一个 .* 是贪婪的,吃掉了 aoooooooabbbboooooaaba

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题