python - 函数 re.findall 返回带有字符串的列表,只包含一个符号
问题描述
import re
s = 'ddvvrwwwrggg'
print(re.findall(r'(.)\1*', s)) # -> ['d', 'v', 'r', 'w', 'r', 'g']
a = list()
for i in re.finditer(r'(.)\1*', s):
a.append(i.group())
print(a) # -> ['dd', 'vv', 'r', 'www', 'r', 'ggg']
为什么 findall 和 finditer 给出不同的结果?我需要 finditer 的,输出应该是['dd', 'vv', 'r', 'www', 'r', 'ggg']
,但我不想使用循环。或者有没有更好的方法来获取所有包含相同符号的子字符串?
解决方案
这确实令人惊讶,但根据文档。与 相比re.finditer
,re.findall
如果模式中存在一个或多个组,则行为如下:
如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。
因此,行为差异确实令人惊讶,但“按设计”。
您可能正在寻找的表达式是:
[x.group() for x in re.finditer(r'(.)\1*', s)]
推荐阅读
- c++ - C++ constexpr if 语句的灵活性
- c# - C# 性能,加速类中的字符串数组
- r - 如果向量的长度不同,如何在列表中单独粘贴
- javascript - Webpack CommonJS 命名导出
- javascript - 如何创建带有徽标的导航栏链接菜单以及用于某些选项和搜索栏的下拉列表?
- docker - Docker 无法创建卷 /usr/share/nginx/html/image
- .net - nuget 和直接引用 dll 的工作方式不同
- java - 我想审核 alfresco 搜索表单中使用的搜索参数
- javascript - 如何在邮件回复中添加页脚
- python - 如何通过 python Tkinter 绘制智能拖放折线?