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

时间:2015-01-06 19:16:46

标签: python regex ip-address

我的正则表达式有问题。我的意图是返回True,如果包含somethin的字符串就像一个域(它应该是一个包含由dot分隔的2或3个单元的字符串)。 我写了这样的模式:

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

如果字符串有两个或三个部分,但是它失败了更长的例子,如

,这是没关系的
  

" www.haha.bla.pl"

我认为{1,2}会产生所有,但它不会。请给我一些提示。

2 个答案:

答案 0 :(得分:3)

您不一定需要regex,例如,您可以计算split的长度

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

或使用count

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

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

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 :(得分:0)

如果你保证点不相邻,或者组件为空 ,你可以简单地计算点数,然后比较1<= s.count('.') <= 2

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