Python 正则表达式findall错误
我运行以下脚本Python 正则表达式findall错误,python,regex,findall,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] [a
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]']
基本上,任何子字符串都与模式匹配。在
[ab.*]
中重复的
是贪婪的-它将匹配尽可能多的字符,以便这些字符后面跟着一个]
。因此,第一个[
和最后一个]
之间的所有内容都是匹配的
改为使用惰性重复,使用*?
:
a = r'[abc] [abc] [y78]'
paaa = re.compile(r'\[ab.*?]')
print(paaa.findall(a))
您也应该避开右方括号,并在正则表达式中使用非贪婪中继器
*?
:
import re
a = r'[abc] [abc] [y78]'
paaa = re.compile(r'\[ab.*?\]')
print(paaa.findall(a))
这将产生:
['[abc]', '[abc]']
“您也应该跳出右方括号”-没有必要。对不起,
paaa
应该是paaa=re.compile(r'\[ab.\]')
我要找的东西基本上会返回['[abc]'、'[abc]'、'[abc][abc]、'[abc][y78]],任何子字符串都与模式匹配。很抱歉,paaa
应该是paaa=re.compile(r'\[ab.\]')
我要查找的是返回['[abc]'、'[abc]'、'[abc][abc]'、'[abc][abc][y78]]的内容,基本上,任何子字符串都与模式匹配。如果您想从包含abc
的任何括号开始,为什么不将[abc][y78]
也包括在您的结果中?
['[abc]', '[abc]']