正则表达式在字符串中查找主机名

时间:2016-05-07 09:32:24

标签: python regex python-2.7

我正在使用正则表达式来查找字符串中的主机名,该主机名匹配所有可能的组合但不能构建一个。

names = ['www.google.com.in','w.stack.in','www.code31ws.com','google.com','ww.sample.co']

regex = '(w{3}?\.?)?[\w?-]+\.(com|in|edu|co)'
for i in range(len(ips)):
    reg = re.search(regex,ips[i])
    if reg:
        print "true {}".format(i)
    else:
        print "false {}".format(i)

结果:

true 0
true 1
true 2
true 3
true 4

希望它不匹配:

w.stack.in
ww.sample.com

2 个答案:

答案 0 :(得分:3)

你的正则表达式正常。您的问题是如何使用它。您使用了re.search()。好吧,re可以在w.stack.in中找到匹配,因为stack.in匹配。但是,您想要确保整个字符串匹配。为此,请使用re.match()。见search() vs. match()。第二种选择是将^放在表达式的开头,说它必须位于字符串的开头。

答案 1 :(得分:1)

发生这种情况的原因是因为www是可选的,search只需匹配字符串的一部分,所以它只是匹配其余部分:

>>> re.search('(w{3}?\.?)?[\w?-]+\.(com|in|edu|co)', 'w.stack.in').group()
'stack.in'

您可以使用必须与整个字符串匹配的match来修复它:

>>> re.match('(w{3}?\.?)?[\w?-]+\.(com|in|edu|co)', 'w.stack.in') is None
True

顺便说一句,我会将第一部分简化为(www\.)?