首页 > 解决方案 > 可选的千位分隔符处理不完整的字符串

问题描述

我需要处理可能具有可选千位分隔符的数字,例如 1234567 和 1,234,567 我天真地假设我可以用 (\d{1,3}([,]?(\d{3}))*) This 来实现,但是,仅匹配 123456(不是 7)和 1,234,567(正确)但是,如果我指定显式匹配数(在这种情况下为 2) (\d{1,3}([,]?(\d{3})){2}) 或边界(例如 \b) (\d{1,3}([,]?(\d{3}))*)\b 执行完整匹配。为什么“贪婪” * 量词在第一个正则表达式的第一个匹配之后停止?

标签: regex

解决方案


如果你想匹配两个数字,有和没有,正确的逗号千位分隔符,那么我会使用交替:

^(\d{1,3}(?:,\d{3})*|\d+)$

演示


推荐阅读