问题描述
import re
s = 'ddvvrwwwrggg'
print(re.findall(r'(.)\1*',s)) # -> ['d','v','r','w','g']
a = list()
for i in re.finditer(r'(.)\1*',s):
a.append(i.group())
print(a) # -> ['dd','vv','www','ggg']
为什么 findall 和 finditer 给出不同的结果?我需要 finditer 的一个,输出应该是 ['dd','ggg']
,但我不想使用循环。或者有没有更好的方法来获取包含所有相同符号的所有子字符串?
解决方法
这确实令人惊讶,但根据 docs。与 re.finditer
不同的是,如果模式中存在一个或多个组,re.findall
的行为如下:
如果模式中存在一个或多个组,则返回一个列表 团体;如果模式有多个,这将是一个元组列表 组。
因此,行为差异确实令人惊讶,但“按设计”。
您可能正在寻找的表达方式是:
[x.group() for x in re.finditer(r'(.)\1*',s)]