这个Python正则表达式可以匹配连续的数字:
\d{6,}(?=\D)(?![.@])|\d{6,}(?=$)
但我不希望比赛以-
开头,例如:
010-12345678 =>无效
12345678 => 12345678
我该怎么做?
答案 0 :(得分:2)
尝试 -
(?<!\d|-)\d{6,}(?=\D)(?![.@])|\d{6,}(?=$)
演示 -
>>>s="""010-12345678 => invalid1234567333 => valid"""
>>>re.findall(r'(?<!-|\d)(\d{6,}(?=\D)(?![.@])|\d{6,}(?=$))',s)
>>>['1234567333']
答案 1 :(得分:1)
你可以通过使用负面的背后隐藏来确保匹配前的角色不是破折号
(?<!-|\d)
以及否定前瞻
(?!-)
因此,例如,您可以使用此代替
(?<!-|\d)(\d{6,}(?=\D)(?![.@])|\d{6,}(?=$))(?!-)
lookbehind确保原始正则表达式之前没有-
或数字,确保1-000000
不匹配。
前瞻确保原始正则表达式之后没有-
,确保000000-1
不匹配。
您必须将原始表达式包装在括号中,否则lookbehind仅对第一个选项\d{6,}(?=\D)(?![.@])
执行操作,而不对第二个选项\d{6,}(?=$)
执行操作。
您可以测试此正则表达式here, at regex101.com。