Python正则表达式匹配数百万或数十亿但不是美元金额

时间:2014-04-21 19:26:58

标签: python regex

我使用Python 2.6.9作为一些正则表达式,我有以下字符串,我想匹配111,111,111和222,222,但不是美元金额。

这是我目前的最佳尝试:

regexObj = re.compile(r'(?<!\$)\d{3}(?:,\d{3})*')
testStr1 = '111,111,111 and 222,222 but not $333,333,333 or $444,444'
regexObj.findall(testStr1)
['111,111,111', '222,222', '333,333', '444']

有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

Btam,请注意,如果您只想按照规定匹配数百万和数十亿,那么您的*量词就会出现问题。这将匹配您想要的,如果您能够指定一些边界,则可以根据边界进行调整。

\b(?<![$,])\d{3}(?:,\d{3}){1,2}(?!,)

请注意,最终量词是{1,2}而不是原始*,因为您说要匹配数百万和数十亿。使用*,您可以匹配数千,数万亿和数以万计。

如果您有关于边界的更多信息(例如,您匹配整个字符串,或者您总是期望在数字后面有空格),我们可以通过锚定或添加边界来使匹配更精确。 / p>