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

正则表达式分组匹配含连字符与括号的数字失败求助

正则表达式提取数字问题解决

你的问题出在第三个分组的正则无法匹配带小数点的数字,而非-、(、)的转义(你对这些字符的转义写法是正确的,-其实在这个场景下不需要转义,直接写也可以)。

原正则里的(\d+)只能匹配纯整数,而目标字符串里的第三个数字是0.2(带小数),所以匹配失败,返回空列表。

修正后的代码

import re
item='800-850(0.2)'
# 调整第三个分组的正则,支持匹配整数或小数
find_list = re.findall(r'(\d+)-(\d+)\((\d+(?:\.\d+)?)\)$', item)
# 将字符串结果转为数字类型(整数或浮点数)
result = [float(num) if '.' in num else int(num) for num in find_list[0]]
print(result)  # 输出: [800, 850, 0.2]

关键说明

  1. 匹配小数的正则:\d+(?:\.\d+)?
    • \d+匹配整数部分
    • (?:\.\d+)?是一个非捕获组,?:表示不捕获这个分组,?表示该部分可选(支持匹配纯整数,比如如果括号里是3也能匹配)
  2. 关于特殊字符的匹配:
    • -:在正则中如果不是用来定义字符范围(比如[a-z]),直接写-就能匹配实际的减号,不需要转义
    • (和):是正则的分组特殊字符,必须用\(和\)来匹配实际的括号,你原来的写法是正确的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:27:07