我正在尝试编写一个正则表达式来搜索$ 1000.00或更多的美元金额并且在前面有一个 - 。 $也应该是可选的。
这是我到目前为止所做的,并没有像我预期的那样工作:(
\-\$?(((\d{1,3},)+\d{3})|\d+)\.\d{2}
但它被触发了一个值 - 73.75美元,这个值应该被忽略。任何指针/想法将不胜感激:)
答案 0 :(得分:4)
您只需检查.
之前的值是否至少为4位数:
-\$?\d{4,}\.\d{2}
请注意,您不需要转义-
,它不是正则表达式中的元字符(在字符类之外)。
- # Match a hyphen
\$? # An optional $ sign
\d{4,} # 4 or more digits
\. # A dot
\d{2} # 2 digits after dot
如果你的数字中有分隔符(,
),那么你可以使用它:
-\$?[\d,]*\d,\d{3}\.\d{2}
这将确保数字后跟逗号和3位数字。在此之前,允许任意数量的数字和逗号都非常宽松。
这当然不是一个非常严格的正则表达式。但同样,创造一个将是困难的。您应该更好地避免使用正则表达式来根据本地化,格式化和一些最小数量来验证金额。
答案 1 :(得分:3)
如何不使用正则表达式: -
>>> abs(float('-$1000'.translate(None, '$,'))) >= 1000
True
>>> abs(float('-$1,000'.translate(None, '$,'))) >= 1000
True
>>> abs(float('-$73.3'.translate(None, '$,'))) >= 1000
False
答案 2 :(得分:2)
鉴于您在匹配字符串中有逗号,我假设您正在查找匹配任何字符串,如$ 1000.00或$ 1,000.00。
这应该捕获两者,你可以see it in practise at rubular。
(\-?\$?(?:(?:\d{1,3}(?:,+\d{3}){1,})|\d{4,})\.\d{2})
打破这个局面:
( - Capture group
-? - Optional hyphen
\$? - Optional dollar sign
(?: - Non-capture group
(?: - Non-capture group
\d{1,3} - Between 1 and 3 digits
(?:,+\d{3}){1,} - At least 1 comma with 3 digits, repeated
)
| - OR
\d{4,} - At least 4 digits
)
\. - a literal dot
\d{2} - 2 digits
)
但是,这仅适用于Engligh / US风格的货币格式。在欧洲,点是数千指标,逗号是小数,如下:$1.000.000,00
。 However, I recently answered a question that dealt with a very similar issue with currency matching in strings