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

Python re正则如何匹配含千分位逗号、小数点的任意数值?

正则数值匹配修复方案

原有正则问题

你编写的正则\b\d+[.,]*\d+[,]*d*\b存在多处缺陷:

  • 书写错误:末尾的d*应为\d*,本身不具备匹配数字的能力
  • 逻辑缺陷:没有针对千分位的「逗号+3位数字」结构做重复匹配设计,导致超过2个逗号的长千分位数值会被截断拆分
  • 额外问题:未过滤和字母绑定的数字(如测试用例中的OCT21里的21),会额外匹配到非独立数值的数字

可直接运行的正确代码

import re

string1 = "6,111,123,999 5,450,900 10.32 OCT21  Dec 31, 2019"
# 正则逻辑说明:
# (?<![a-zA-Z]) 负向后断言,要求数字前不能是英文字母
# \b 匹配单词边界
# \d{1,3} 匹配开头1-3位数字
# (?:,\d{3})* 非捕获组,匹配0次或多次「逗号+3位数字」的标准千分位结构,支持任意长度的千分位数值
# (?:\.\d+)? 非捕获组,匹配0次或1次「小数点+多位数字」的小数结构
# \b 匹配单词边界
# (?![a-zA-Z]) 负向前断言,要求数字后不能是英文字母
num = re.findall(r'(?<![a-zA-Z])\b\d{1,3}(?:,\d{3})*(?:\.\d+)?\b(?![a-zA-Z])', string1)
print(num)

输出结果

['6,111,123,999', '5,450,900', '10.32', '31', '2019']

完全符合预期输出要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:15:03