正则表达式查找不包括四位数字的数字

时间:2012-01-17 18:14:05

标签: regex regex-negation

我想弄清楚如何找到不是年份的数字(我将一年定义为一个四位数的数字。)

例如,我想拿起

1

12

123

但不是 1234以避免日期(4位数)。

如果正则表达式也选择12345这很好,但不是解决此问题所必需的

(注意:这些要求可能看起来很奇怪。它们是我坚持使用的更大解决方案的一部分)

3 个答案:

答案 0 :(得分:5)

如果可以使用lookbehind和lookahead,则以下内容应该有效:

(?<!\d)(\d{1,3}|\d{5,})(?!\d)

说明:

(?<!\d)            # Previous character is not a digit
(\d{1,3}|\d{5,})   # Between 1 and 3, or 5 or more digits, place in group 1
(?!\d)             # Next character is not a digit

如果您不能使用外观,则以下内容应该有效:

\b(\d{1,3}|\d{5,})\b

说明:

\b                 # Word boundary
(\d{1,3}|\d{5,})   # Between 1 and 3, or 5 or more digits, place in group 1
\b                 # Word boundary

Python示例:

>>> regex = re.compile(r'(?<!\d)(\d{1,3}|\d{5,})(?!\d)')
>>> regex.findall('1 22 333 4444 55555 1234 56789')
['1', '22', '333', '55555', '56789']

答案 1 :(得分:0)

根据您使用的正则表达式风格,这可能对您有用:

(([0-9]{1,3})|([0-9]{5,}))

答案 2 :(得分:-1)

java中的

(\\d{0,4} | \\d{6,})