Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式查找不包括四位数字的数字_Regex_Regex Negation - Fatal编程技术网

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

Regex 正则表达式查找不包括四位数字的数字,regex,regex-negation,Regex,Regex Negation,我试图找出如何找到不是年份的数字(我将年份定义为一个四位数宽的数字) 例如,我想接电话 1 12 123 但不是 1234以避免日期(4位数字) 如果正则表达式也拾取了12345,这很好,但不是解决此问题所必需的 (注意:这些要求可能看起来有些奇怪。它们是我一直坚持的更大解决方案的一部分)(\\d{0,4}\\d{6,})java中的。(\\d{0,4}\\d{6,})java中的。根据您使用的正则表达式的风格,这可能适用于您: (([0-9]{1,3})|([0-9]{5,})) 根据

我试图找出如何找到不是年份的数字(我将年份定义为一个四位数宽的数字)

例如,我想接电话

1

12

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

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


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

(\\d{0,4}\\d{6,})java中的

(\\d{0,4}\\d{6,})java中的

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

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

根据您使用的regex风格,这可能适用于您:

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

如果“向后看”和“向前看”可用,则以下操作应有效:

(?<!\d)(\d{1,3}|\d{5,})(?!\d)
\b(\d{1,3}|\d{5,})\b
说明:

(?<!\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                 # 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']

>>regex=re.compile(r'(?如果可以使用lookback和lookahead,则以下操作应该有效:

(?<!\d)(\d{1,3}|\d{5,})(?!\d)
\b(\d{1,3}|\d{5,})\b
说明:

(?<!\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                 # 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']

>regex=re.compile(r'(?你想用什么语言?抱歉重复。抱歉-我应该澄清一下:这是一个用vb.net和c#.net编写的高级系统。我没有看过代码,但可能很简单:system.Text.RegularExpression你想用什么语言?抱歉重复。抱歉-我应该澄清一下:这是一个编写的高级系统在vb.net和c#.net中,我没有看过代码,但它可能很老:System.Text.RegularExpressionsNice!但是…你的lookaroundless正则表达式在以下输入中遗漏了22和666666:
1223334444445555555666666666777
@MikeClark-是的,这是一种很难处理的方法,这就是为什么lookaroundless正则表达式更可取的原因。如果你刚才做了
(\d{1,3}\d{5,})在没有边界检查的情况下,你会得到更坏的结果,把中间的数字拆分。把第二个正则表达式转换成使用词边界似乎更好,只是现在的差别是,当字母和数字混合时,第二个不能匹配,“A333”将匹配第一个正则表达式,而不是第二个。我们的第一个(回头看)@jJack-很高兴它成功了,你可以通过点击我答案旁边复选标记的轮廓作为最佳解决方案。很好!但是…你的lookaroundless正则表达式在以下输入中遗漏了22和666666:
12233344445555556666666777
@mikelack-是的,这是一种很难绕过的方法,这就是为什么lookaroundless正则表达式更可取的原因。如果您刚刚执行了
(\d{1,3}\d{5,})在没有边界检查的情况下,你会得到更坏的结果,把中间的数字拆分。把第二个正则表达式转换成使用词边界似乎更好,只是现在的差别是,当字母和数字混合时,第二个不能匹配,“A333”将匹配第一个正则表达式,而不是第二个。我们的第一个(向后看)。@jJack-很高兴它成功了,您可以通过单击我答案旁边复选标记的轮廓作为最佳解决方案。