我正在尝试编写一个正则表达式来搜索 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
.但是,我最近回答了一个问题,该问题涉及字符串中的货币匹配的非常相似的问题。