识别具有 2 或 3 个组件的有效 IP 地址

Recognizing valid IP addresses having 2 or 3 components

我对正则表达式有疑问。我的意图是 return True if string containing something like a domain(它应该是一个包含由点分隔的 2 或 3 个单元的字符串)。 我写的模式是这样的:

pattern = r'([a-z]+(\.[a-z]+){1,2})'

如果字符串有 2 个或三个部分也没关系,但它会失败,例如

"www.haha.bla.pl"

我以为 {1,2} 会成功,但事实并非如此。请给我一些提示。

你不一定需要 regex,例如你可以计算 split

的长度
def matches(s):
    return len(s.split('.')) > 2

或使用count

def matches(s):
    return s.count('.') >= 2

要处理 '.' 字符之间的空字符串,您可以在 split

之后 filter
def matches(s):
    return len(list(filter(bool, s.split('.')))) > 2

>>> matches('12.34.67.98')
True
>>> matches('foo....tv')
False
>>> matches('12.345')
False

好吧如果你保证点永远不会相邻,或者组件是空的,你可以简单地数点,然后比较如果 1<= s.count('.') <= 2

s = "aa.bb.cc.dd"
s.count('.')
# 3