当我在 python 中运行时,我的正则表达式无法捕获所有组,我不知道为什么......
我正在尝试提取数字序列。
import re
my_string = '467..114..'
re.search(r'(?:(\d+)(?:\.*))*',my_string).groups()
# outputs ('114',)
我希望这能得到两个组,“467”和“114”。
解释一下这个表达式(或者我的想法):
(\d+)
(?:\.*)
我已经得到了提取第一组或第二组数字的方法,但很难同时获得这两个数字......
我确实知道我可以使用
re.findall()
来获取数字,但我想要跨度,并且我想知道为什么它不起作用......
编辑:
我发现
re.finditer()
确实返回 Match 对象,而不仅仅是像 re.findall()
这样的字符串列表。这对我来说似乎是一种合理的方式,但仍然好奇如何让它与搜索一起工作,我觉得这应该是可能的......
您尝试过使用
list(re.finditer(pattern, string))
吗?
这将返回包含所有匹配项的 re.Match 对象列表。
您只获得第一个匹配项的原因是因为
re.search
只返回第一个匹配项。
(注意:我想将此添加为评论,但没有评论的声誉)