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-很高兴它成功了,您可以通过单击我答案旁边复选标记的轮廓作为最佳解决方案。