gpt4 book ai didi

Python 重新 findall vs finditer

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:13 27 4
gpt4 key购买 nike

我有以下字符串:

'3 4 4 5 5 5 2 2'

我需要像这样从中提取所有连续出现的事件:

'44 555 22'

为此,我使用了以下代码。它工作正常:

n = input().replace(' ', '')
result = re.finditer(r'(\d)\1+', n)
for match in result:
print(match.group(0), end=' ')

我的问题是如何修改我的正则表达式以便我可以使用 findall() 代替?我尝试使用这个:

n = input().replace(' ', '')
result = re.findall(r'(\d)\1+', n)
print(result)

它只返回这个:['4', '5', '2']

这种行为的原因是什么?通过查看 regex看起来该模式只捕获第 1 组而不是第 0 组。我想我无法在 findall 上调用 group()。是否可以通过任何方式更改我的模式或我可以做些什么来从 findall 获得相同的结果?例如:['44', '555', '22']

最佳答案

findall() 返回所有带括号的组(如果有),否则返回完整匹配。在您的示例中,您可以对整体和内部使用分组,然后您需要指定第二组而不是第一组的重复,并选择第一组作为结果:

[x for x,y in re.findall(r'((\d)\2+)', '33344555')]

返回:

('333', '44', '555')

但我个人会坚持使用 finditer()。你为什么要改变它?

顺便说一句,您不需要通过去除空格来准备您的输入:

[x for x,y in re.findall(r'((\d)(?: \2)+)', '3 3 3 4 4 5 5 5')]

返回:

['3 3 3', '4 4', '5 5 5']

关于Python 重新 findall vs finditer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47906708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com