regex设置python中的组长度
我有一个版本“major.minor.patch”regex设置python中的组长度,python,regex,Python,Regex,我有一个版本“major.minor.patch” 主要版本范围[0-99999] 次要版本范围[0-9999] 修补程序版本范围[0-999999] 但总的来说,“major.minor.path”不应超过16个字符,包括。(点)。 我尝试了以下reg表达式 ^(\d{1,5}[.]\d{1,4}[.]\d{1,6}){1,16}$ 但是{1,16}表示前一个表达式的1到16次重复,而不是前一组的长度 如何将以下组的长度设置为16 (\d{1,5}[.]\d{1,4}[.]\d{1,6})
主要版本范围
[0-99999]
次要版本范围
[0-9999]
修补程序版本范围
[0-999999]
但总的来说,“major.minor.path”不应超过16个字符,包括。(点)。 我尝试了以下reg表达式
^(\d{1,5}[.]\d{1,4}[.]\d{1,6}){1,16}$
但是{1,16}表示前一个表达式的1到16次重复,而不是前一组的长度
如何将以下组的长度设置为16
(\d{1,5}[.]\d{1,4}[.]\d{1,6})
在开始处添加一个前瞻,仅当其在1-16范围内时才允许匹配,方法是使用
$
在末尾锚定:(?=^.{1,16}$)
此处有两个要组合的正则表达式
^[\d.]{,16}$
^\d{1,5}[.]\d{1,4}[.]\d{1,6}$
^(?=[\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(字符串)是否在限制范围内)会更简单。感谢Abhijit regex look ahead解决了此问题。