你有两个正则表达式,他再要结合
^[\d.]{,16}$
^\d{1,5}[.]\d{1,4}[.]\d{1,6}$
两者本身就是无效的,因为(1)可以匹配超过2个点,并在每个版本的单个长度的限制将不被执行。 (2)肯定不起作用,因为它超过了包括'。'在内的16个字符的字符串长度限制。
正则表达式lookhead的一个不太已知特征可以用于(和-ED)这两者会是这样的
^(?=[\d.]{,16}$)\d{1,5}[.]\d{1,4}[.]\d{1,6}$
实施例在上述的正则表达式表达式组合:
exp = r'^(?=[\d.]{,16}$)\d{1,5}[.]\d{1,4}[.]\d{1,6}$'
vers = ['111.111.111',
'111111.1111.1111',
'11111.1111.111111',
'11111.1111.11111']
["{} Matches ? {}".format(v, "YES" if re.match(exp, v) else "NO")
for v in vers]
输出
['111.111.111 Matches ? YES',
'111111.1111.1111 Matches ? NO',
'11111.1111.111111 Matches ? NO',
'11111.1111.11111 Matches ? YES']
你确定你需要这是一个单一的正则表达式吗?让你的正则表达式变为'(\ d +)[。](\ d +)[。](\ d +)',然后再分别执行其余的检查会更简单(看看版本范围是否正确,如果是len )超出限制) – hugomg