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

3 投票
1 回答
1551 浏览
提问于 2025-04-18 03:38

我正在使用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 个回答

3

Btam,请注意,如果你只想匹配“百万”和“十亿”,那么你的 * 量词就有问题。这个量词会匹配你想要的内容,但如果你能指定一些边界,就需要进行调整。

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

要注意,最后的量词是 {1,2},而不是你原来的 *,因为你说你只想匹配“百万”和“十亿”。使用 * 的话,可能会匹配到“千”、“万”、“万亿”甚至更多。

如果你有更多关于边界的信息(比如,你是在匹配整个字符串,或者你总是期望数字后面有一个空格),我们可以让匹配更加精确,可以通过固定位置或者添加边界来实现。

撰写回答