如何匹配除特定数字之外的所有3位数字

时间:2015-08-09 19:11:57

标签: python regex regex-negation

如何匹配除一个特定整数之外的所有3位整数,例如914。

获取所有3位数的整数非常简单[0=9][0-9][0-9]

尝试类似[0-8][0,2-9][0-3,5-9]之类的东西,除了914之外,还从集合中删除了更多的整数。

我们如何解决这个问题?

2 个答案:

答案 0 :(得分:10)

您可以使用否定前瞻来添加例外:

\b(?!914)\d{3}\b

单词边界\b可确保我们将数字与整个单词匹配。

请参阅regex demoIDEONE demo

import re
p = re.compile(r'\b(?!914)\d{3}\b')
test_str = "123\n235\n456\n1000\n910 911 912 913\n  914\n915 916"
print(re.findall(p, test_str))

输出:

['123', '235', '456', '910', '911', '912', '913', '915', '916']

答案 1 :(得分:1)

使用'|'允许多种模式:

[0-8][0-9][0-9]|9[02-9][0-9]|91[0-35-9]

例如:

>>> import re
>>> matcher = re.compile('[0-8][0-9][0-9]|9[02-9][0-9]|91[0-35-9]').match
>>> for i in range(1000):
...     if not matcher('%03i' % i):
...         print i
... 
914