python 正则表达式未能找到所有匹配项

问题描述 投票:0回答:1

当我在 python 中运行时,我的正则表达式无法捕获所有组,我不知道为什么......

我正在尝试提取数字序列。

import re

my_string = '467..114..'
re.search(r'(?:(\d+)(?:\.*))*',my_string).groups()
# outputs ('114',)

我希望这能得到两个组,“467”和“114”。

解释一下这个表达式(或者我的想法):

  1. 我想捕获一系列数字,需要至少一个,但可以有多个 -
    (\d+)
  2. 这之后将是零个或多个句点/点,我不想捕获它们 -
    (?:\.*)
  3. 这种数字后跟点的模式可以重复,因此上面的两个被包装在另一个可以重复 0 次或多次的非捕获组中。

我已经得到了提取第一组或第二组数字的方法,但很难同时获得这两个数字......

我确实知道我可以使用

re.findall()
来获取数字,但我想要跨度,并且我想知道为什么它不起作用......

编辑:

我发现

re.finditer()
确实返回 Match 对象,而不仅仅是像
re.findall()
这样的字符串列表。这对我来说似乎是一种合理的方式,但仍然好奇如何让它与搜索一起工作,我觉得这应该是可能的......

python regex regex-group
1个回答
1
投票

您尝试过使用

list(re.finditer(pattern, string))
吗?

这将返回包含所有匹配项的 re.Match 对象列表。

您只获得第一个匹配项的原因是因为

re.search
只返回第一个匹配项。

(注意:我想将此添加为评论,但没有评论的声誉)

© www.soinside.com 2019 - 2024. All rights reserved.