python - 正则表达式:排除基于非捕获组的结果?

标签 python regex string validation

所以我尝试使用以下正则表达式来匹配有效价格的模式

^\$[1-9]\d{0,2}(?:\,\d{3})?(?:\.\d{2})?

(源自此处关于 SO 的另一个问题)

匹配存在的约束条件:

  1. $1.00 <= price <= $999,999.99
  2. 不需要小数位($1$1.00 一样有效)
  3. 小数点后一位数字无效($1.1$2.9 等)
  4. 小数点后 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$]|$)

Demo

关于python - 正则表达式:排除基于非捕获组的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36805833/

相关文章:

c# - 带连字符的电话号码正则表达式 C#

Python字符串分割多个括号

c++ - 从输入文件中逐行输入并使用 strtok() 进行标记化,然后输出到输出文件中

python - 如何在每隔一个元素处组合两个字符串列表?

python - 手动设置 DJANGO_SETTINGS_VARIABLE

python - skfuzzy无法识别

ios - 如何在单个文件中维护字符串常量 - ios

python - 将一系列函数应用于某些参数

java - 通过分割或使用正则表达式将 ID 与另一个字符串进行匹配

regex - 包含 a 和偶数个 b 的字符串的正则表达式