你有兩個正則表達式,他再要結合
^[\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