我想弄清楚如何找到不是年份的数字(我将一年定义为一个四位数的数字。)
例如,我想拿起
1
12
123
但不是
1234
以避免日期(4位数)。
如果正则表达式也选择12345
这很好,但不是解决此问题所必需的
(注意:这些要求可能看起来很奇怪。它们是我坚持使用的更大解决方案的一部分)
答案 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)
(\\d{0,4} | \\d{6,})
。