所以我尝试使用以下正则表达式来匹配有效价格的模式
^\$[1-9]\d{0,2}(?:\,\d{3})?(?:\.\d{2})?
(源自此处关于 SO 的另一个问题)
匹配存在的约束条件:
-
$1.00 <= price <= $999,999.99
- 不需要小数位(
$1
与$1.00
一样有效) - 小数点后一位数字无效(
$1.1
、$2.9
等) - 小数点后 3 位以上的数字无效(
$1.111
、$2.999
等)
上述模式适用于处理前两个约束,但不适用于其他约束。问题是在 (3) 或 (4) 的情况下,小数点前的价格部分是匹配的。
例如:
$100,000.4 matches to $100,000
$200,000.444 matches to $200,000.44
如何修改它,以便在 (3) 或 (4) 的情况下整个字符串不匹配?
最佳答案
简单!只需在末尾添加 ([^,.\d$]|$)
,这样 Regex 解析器就可以工作,直到最接近的不是数字、逗号、点或美元。或者它已经在字符串的末尾。
^\$[1-9]\d{0,2}(?:\,\d{3})?(?:\.\d{2})?([^,.\d$]|$)
关于python - 正则表达式:排除基于非捕获组的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805833/