我的正则表达式有问题。我的意图是返回True,如果包含somethin的字符串就像一个域(它应该是一个包含由dot分隔的2或3个单元的字符串)。 我写了这样的模式:
pattern = r'([a-z]+(\.[a-z]+){1,2})'
如果字符串有两个或三个部分,但是它失败了更长的例子,如
,这是没关系的" www.haha.bla.pl"
我认为{1,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