2013-10-17 145 views
2

有人可以向我解释为什么这不匹配,我收到不可接受的。用于匹配IP地址的Python正则表达式逻辑

linesout = "test.host.com (10.200.100.10)" 
pat = re.compile("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") 
test = pat.match(linesout) 
if test: 
     print "Acceptable ip address" 
else: 
     print "Unacceptable ip address" 

谢谢

+0

're.match'是从字符串的开始,你要找的're.search'。 – Ben

+1

另外请注意,'999.999.999.999'绝对不是一个可接受的IP地址,虽然你的代码会声称它是... – twalberg

回答

3

使用search代替match

pat = re.compile("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") 
test = pat.search(linesout) 

如果你想在这两种情况下使用match然后在前面加上正则表达式与.*

pat = re.compile(".*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") 
test = pat.match(linesout) 

输出:

Acceptable ip address 

search() vs. match()

的Python的引用文件提供基于正则表达式 两种不同的基本操作:re.match()检查仅在 的字符串开始处匹配,而重。 search()检查 字符串中任何地方的匹配(这是默认情况下Perl所做的)。

+0

啊,是的,我现在看到了差异以及如何使用匹配。有效。谢谢! –

+0

@CDubya你的正则表达式最好写成'(?:\ d {1,3} \。){3} \ d {1,3}' – hwnd

-1
pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$") 
test = pat.match(hostIP) 
if test: 
    print ("Acceptable ip address") 
else: 
    print ("Unacceptable ip address")