正则表达式findall错误

时间:2018-08-02 03:41:32

标签: python regex findall

我运行以下脚本

a = r'[abc] [abc] [y78]'
paaa = re.compile(r'\[ab.*]')
paaa.findall(a)

我获得了

['[abc] [abc] [y78]']

为什么缺少'[abc]'? '[abc]'也显然与模式匹配。 python3 re.findall函数中是否存在任何错误?

说明:

抱歉,paaa应该是paaa = re.compile(r'\[ab.*\]') 我正在寻找的东西将会返回

['[abc]', '[abc]', '[abc] [abc]', '[abc] [abc] [y78]']

基本上,任何子串都与模式匹配。

2 个答案:

答案 0 :(得分:2)

.中重复的[ab.*] greedy -它会匹配尽可能多的字符,以使这些字符后跟一个]。因此,第一个[和最后一个]之间的所有内容都是匹配的。

改为使用惰性重复,并使用.*?

a = r'[abc] [abc] [y78]'
paaa = re.compile(r'\[ab.*?]')
print(paaa.findall(a))
['[abc]', '[abc]']

答案 1 :(得分:1)

您也应转义右方括号,并在正则表达式中使用非贪婪中继器*?

import re
a = r'[abc] [abc] [y78]'
paaa = re.compile(r'\[ab.*?\]')
print(paaa.findall(a))

这将输出:

['[abc]', '[abc]']