更好的方法来找到字符串中的模式?

时间:2014-12-03 11:24:21

标签: python regex string

我有两个字符串,我想从中提取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 .之前查找数字。什么是更好的方法,因为它看起来很脏,也许是第一次出现digits.digits.digits.digits并停在下一个非数字字符,一个模式寻找?你会怎么做?

1 个答案:

答案 0 :(得分: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'