You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式仅匹配第一个元素问题求助

解决你的正则匹配问题:提取所有数字组成完整列表

嘿,我来帮你搞定这个问题!你的代码只输出[13]主要有两个核心问题:匹配方法用错了,还有正则表达式写得太冗余且有错误。

问题分析

  1. search()方法的局限性:你用了mo = phoneNumRegex.search(message),但search()只会返回第一个匹配到的内容,所以它找到13就停止了,根本不会去管后面的数字。
  2. 冗余且错误的正则:你的正则r'\d\d|\d-\d\d|\d-\d\d|\d-\d\d|\d-\d\d|\d- \d\d|\d'不仅重复了很多规则,还多了个不必要的空格(\d- \d\d里的空格)——这会导致它匹配不到像13-45这种没有空格的分隔段。而且|的匹配逻辑是从左到右,一旦前面的\d\d(也就是两位数字)匹配成功,后面的规则就不会生效了。

最简解决方案:不用正则更高效

其实你的字符串是标准的-分隔数字,完全没必要用正则,直接分割字符串就行:

message = '13-45-33-19-29-8'
# 按'-'分割字符串,再转成整数列表
listed = list(map(int, message.split('-')))
print(listed)  # 输出: [13, 45, 33, 19, 29, 8]
print(type(listed))  # 输出: <class 'list'>

如果一定要用正则(比如字符串格式更复杂的情况)

用findall()方法获取所有匹配项,同时简化正则表达式:

import re
message = '13-45-33-19-29-8'
# 匹配一个或多个数字(不管是1位还是2位)
phoneNumRegex = re.compile(r'\d+')
# findall()会返回所有匹配的字符串组成的列表
all_matches = phoneNumRegex.findall(message)
# 转成整数列表
listed = list(map(int, all_matches))
print(listed)  # 输出: [13, 45, 33, 19, 29, 8]

这样就能得到你想要的完整数字列表啦!

内容的提问来源于stack exchange,提问作者Mark Tenorio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:35:24