2014-12-03 45 views
0

我有两个字符串,我想从中提取IP。更好的方法来查找字符串中的模式?

它们是:

a = """+CGCONTRDP: 1,0,"open.internet","100.80.54.162.255.255.255.255","100.80.54.162","8.8.8.8 
","62.40.32.33","0.0.0.0","0.0.0.0",0 

OK 
""" 
b = """+UIPADDR: 1,"usb0:0","100.80.54.93","255.255.255.255","","" 

OK 
""" 

从第一我想100.80.54.162和第二我想100.80.54.162。 现在显然IP数字的长度发生了变化。目前,我在","上吐痰,并在第一个4 .之前找到数字。什么是更好的方式来做到这一点,因为它看起来很脏,也许是digit.digits.digits.digits的第一次出现,并停在下一个非数字字符,一个模式寻找?你会怎么做?

+0

看看're'模块,对正则表达式 – Kroltan 2014-12-03 11:31:47

+0

感谢我的意思是我是为重新最强大的思维方法,我想这是一个微不足道的问题 – Paul 2014-12-03 11:33:33

回答

3

如果你只是想在你的字符串匹配前四个点分隔的数字,那么它的琐碎:

>>> re.search(r"\d+\.\d+\.\d+\.\d+", a).group() 
'100.80.54.162' 

如果你想要做一些额外的检查(仅允许0到255之间的和数字),您可以:

>>> re.search(r"""(?x)\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\. 
...      (25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\. 
...      (25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\. 
...      (25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b""", b).group() 
'100.80.54.93' 
+0

re.findall也会做。+ 1用于额外的验证 – vks 2014-12-03 11:34:26

+0

额外的验证答案是伟大的,我想更强大,谢谢! – Paul 2014-12-03 11:34:55

+0

@vks:他只想找到第一个,所以're.findall'不会是正确的。 – 2014-12-03 11:35:01

相关问题