Python Regex可以找到1000美元或更多的金额

时间:2013-09-11 06:33:53

标签: python regex

我正在尝试编写一个正则表达式来搜索$ 1000.00或更多的美元金额并且在前面有一个 - 。 $也应该是可选的。

这是我到目前为止所做的,并没有像我预期的那样工作:(

\-\$?(((\d{1,3},)+\d{3})|\d+)\.\d{2}

但它被触发了一个值 - 73.75美元,这个值应该被忽略。任何指针/想法将不胜感激:)

3 个答案:

答案 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,00However, I recently answered a question that dealt with a very similar issue with currency matching in strings