如何在Python中使用正则匹配带千位分隔符与小数分隔符的价格
问题原因分析
- 正则中的
.未转义:.在正则语法中属于通配符,可匹配任意字符,你原本想匹配作为千位分隔符的.,实际运行时会匹配到数字、逗号等其他内容,直接导致分组捕获逻辑错位 - 分组规则固定僵化:原正则写死了3个数字分组、2个分隔符的结构,只能适配带有2个千位分隔符的百万级金额,低于百万级的金额仅带有1个千位分隔符,匹配时就会出现偏差,最终导致提取结果丢失位数
- 原代码存在语法误用:
print = xxx的写法会覆盖Python内置的print打印函数,导致后续无法正常调用打印功能
优化实现方案
无需手动拆分多分组捕获,直接匹配所有符合千位分隔规则的整数金额部分,再统一移除千位分隔符即可,可兼容所有量级的金额提取:
import re # 测试文本示例 line = "Debt 1 of 2 for an amount of: $ 58.610,00, Unpaid" # 正则适配所有带千位分隔符、小数固定为,00的金额格式 regex = r"\$ ((?:\d{1,3}\.)*\d{3}),00" match = re.search(regex, line) if match: # 移除千位分隔符的.,拼接$前缀得到最终结果 amount = "$" + match.group(1).replace(".", "") print(amount)
效果验证
- 示例输入
$ 58.610,00,输出为$58610,符合预期要求 - 百万级输入
$ 1.234.567,00,输出为$1234567 - 千级输入
$ 1.234,00,输出为$1234
全量级金额均可正常提取,无需额外调整规则。
内容的提问来源于stack exchange,提问作者Diego Ignacio Ortiz
相关产品推荐
相关产品推荐

