为什么下面这个匹配整数的正则表达式不按预期工作?

1 投票
1 回答
59 浏览
提问于 2025-04-14 16:10

下面这段Python代码:

pattern = r'(0|1|2|3|4|5|6|7|8|9)+'
text = "Here are some numbers: 10, 201."
matches = re.findall(pattern, text)
print(matches)

输出结果是:

['0', '1']

为什么它没有打印出 ['10', '201'] 呢?

1 个回答

2

我来帮你拆解一下你的正则表达式,并详细解释一下。

r'(0|1|2|3|4|5|6|7|8|9)+'

这个表达式会匹配所有连续的数字字符串,但你的捕获组(也就是()里面的内容)只包含一个数字,所以对于每个连续的数字字符串,只有最后一个数字会被捕获并保存下来。(在正则表达式中,匹配和捕获组是不同的,你的逻辑没有错,只是捕获组的设置不太对。)

如果你想在正则匹配中获取整个数字字符串,可以简单地使用这样的模式:

r'(\d+)'

这个模式会匹配任何数字。(它和使用[0-9]+是一样的。)

撰写回答