Python 正则表达式,用于查找 1000 美元或更多的金额



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

这就是我到目前为止所拥有的,它没有按我的预期工作:(

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

但是当这个值应该被忽略时,它被触发了 -$73.75。任何指示/想法将不胜感激:)

您可以简单地检查 . 之前的值是否至少为 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 个数字。在此之前,它允许任意数量的数字和逗号是相当宽松的。

当然,这不是一个非常严格的正则表达式。但同样,创建一个将很困难。您最好避免使用正则表达式来验证基于本地化、格式和一些最小金额的数量。

不使用正则表达式怎么样:-

>>> abs(float('-$1000'.translate(None, '$,'))) >= 1000
True
>>> abs(float('-$1,000'.translate(None, '$,'))) >= 1000
True
>>> abs(float('-$73.3'.translate(None, '$,'))) >= 1000
False

鉴于匹配字符串中有逗号,我假设您正在考虑匹配 $1000.00 或 $1,000.00 等字符串。

这应该捕获两者,您可以在 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
)

但是,这仅适用于英格利/美式货币格式。在欧洲,点是千位指示器,逗号是小数点,如下所示: $1.000.000,00 .但是,我最近回答了一个问题,该问题涉及字符串中的货币匹配的非常相似的问题。

最新更新