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

如何用Python正则提取带连字符的年龄数字,得到预期元组格式结果

正则修改方案与实现

错误原因

你之前的正则存在两个核心问题:

  1. 仅支持匹配单数字:[0-9]?、[0-9]都只能匹配0或1位数字,天然无法正确匹配10这类多位数
  2. 分支匹配优先级错误:正则分支会优先匹配左侧规则,[0-9]|10的写法下,遇到10时会先匹配到[0-9]规则取第一个字符1,剩余的0再匹配对应规则,最终得到(1,0)的错误结果,即使调整分支顺序为10|[0-9]也只能兼容10这一个特殊双位数,无法适配11、20等其他多位数场景。

正确正则与实现代码

使用r'(\d+)(?:-(\d+))?years'作为匹配规则,逻辑说明:

  • \d+:匹配1位及以上的数字,支持任意位数的年限
  • (?:-(\d+))?:非捕获组匹配可选的横杠+第二个数字,?:表示该组只做匹配不进入捕获结果,末尾的?表示整个横杠加第二个数字的结构是可选的,适配单数字年限场景

完整Python实现代码:

import re

text = "1-2years. 3years. 10years."
matches = re.findall(r'(\d+)(?:-(\d+))?years', text)
result = []
for match in matches:
    if match[1]: # 存在第二个数字,即横杠分隔的场景
        result.append((int(match[0]), int(match[1])))
    else: # 单数字场景
        # 注意Python中(3)属于int类型,单元素元组需要写为(3,),如果确实需要单元素无逗号的形式直接存int即可
        result.append(int(match[0]))
        # 如果要严格对齐元组格式,替换为:result.append((int(match[0]),))

print(result)
# 输出:[(1, 2), 3, 10] 或 [(1, 2), (3,), (10,)] 依你存储逻辑调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:27:03