我使用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']
有人可以帮忙吗?
谢谢!
答案 0 :(得分:3)
Btam,请注意,如果您只想按照规定匹配数百万和数十亿,那么您的*
量词就会出现问题。这将匹配您想要的,如果您能够指定一些边界,则可以根据边界进行调整。
\b(?<![$,])\d{3}(?:,\d{3}){1,2}(?!,)
请注意,最终量词是{1,2}
而不是原始*
,因为您说要匹配数百万和数十亿。使用*
,您可以匹配数千,数万亿和数以万计。
如果您有关于边界的更多信息(例如,您匹配整个字符串,或者您总是期望在数字后面有空格),我们可以通过锚定或添加边界来使匹配更精确。 / p>