正则表达式分组匹配含连字符与括号的数字失败求助
正则表达式提取数字问题解决
你的问题出在第三个分组的正则无法匹配带小数点的数字,而非-、(、)的转义(你对这些字符的转义写法是正确的,-其实在这个场景下不需要转义,直接写也可以)。
原正则里的(\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]
关键说明
- 匹配小数的正则:
\d+(?:\.\d+)?\d+匹配整数部分(?:\.\d+)?是一个非捕获组,?:表示不捕获这个分组,?表示该部分可选(支持匹配纯整数,比如如果括号里是3也能匹配)
- 关于特殊字符的匹配:
-:在正则中如果不是用来定义字符范围(比如[a-z]),直接写-就能匹配实际的减号,不需要转义(和):是正则的分组特殊字符,必须用\(和\)来匹配实际的括号,你原来的写法是正确的
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

