如何编写正则匹配小数点前最多3位、小数点后至少2位的数字
正则表达式调整方案
问题原因
你当前使用的正则\b\d{1,3}\.\d{2}?存在两处问题:
\d{2}?中的?是惰性匹配符,会让匹配逻辑只取最少满足条件的2位小数,不会继续向后匹配- 没有限定匹配小数点后所有剩余的数字,因此只会保留前两位小数结果
正确正则写法
你需要的匹配规则可通过\b\d{1,3}\.\d{2,}\b实现,其中:
\d{1,3}:匹配小数点前1到3位数字,过滤掉小数点前超过3位的非法值\.:匹配小数点本身\d{2,}:匹配小数点后至少2位数字,贪婪模式会自动匹配所有后续连续数字,覆盖你需要的「小数点后2位及以上」的要求- 首尾的
\b为单词边界,避免匹配到嵌入在其他字符串中的不完整数字
修改后代码示例
import re text = "212.12454" result = re.search(r"\b\d{1,3}\.\d{2,}\b", text) print(result.group())
运行输出
212.12454
验证效果
- 合法值可完整匹配:
22.23566556、123.123、1.00都能正常匹配完整内容 - 非法值自动过滤:
4564.1546(小数点前4位)、123.1(小数点后仅1位)都不会被匹配
内容的提问来源于stack exchange,提问作者Eduardo Herrera
相关产品推荐
相关产品推荐

