识别具有 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
我对正则表达式有疑问。我的意图是 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