如何在Python中使用re(gex)在文本中找到类似252.63.71.62的模式?

时间:2013-05-03 10:46:51

标签: python regex

我有一个网页,我使用Python中的资源模块从中获取文本。但是,我没有得到它,如何从文档中获取126.23.73.34这样的数字模式并使用re模块将其解压缩出来?

3 个答案:

答案 0 :(得分:2)

您可以将正则表达式用于IP d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

text = "126.23.73.34";
match = re.search(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', text)
if match:
   print "match.group(1) : ", match.group(0)

如果您正在寻找完整的正则表达式来获取IPv4地址,您可以找到最合适的正则表达式here

要将IP地址中的所有4个数字限制为0-255,您可以使用以上来源中的这个:

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

答案 1 :(得分:1)

如果是html文本;您可以使用html解析器(例如BeautifulSoup)来解析它,使用正则表达式来选择看起来像ip的字符串,使用socket模块来验证ips:

import re
import socket
from bs4 import BeautifulSoup # pip install beautifulsoup4

def isvalid(addr):
    try:
        socket.inet_aton(addr)
    except socket.error:
        return False
    else:
        return True

soup = BeautifulSoup(webpage)
ipre = re.compile(r"\b\d+(?:\.\d+){3}\b") # matches some ips and more
ip_addresses = [ip for ips in map(ipre.findall, soup(text=ipre))
                for ip in ips if isvalid(ip)]

注意:它仅从文本中提取ips,例如,它忽略了html属性中的ips。

答案 2 :(得分:0)

你可以用它。它只接受 VALID IP地址:

import re
pattern = "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"
text = "192.168.0.1 my other IP is 192.168.0.254 but this one isn't a real ip 555.555.555.555"
m = re.findall(pattern, text)
for i in m :
    print(i)

输出:

C:\wamp\www>Example.py
192.168.0.1
192.168.0.254

- 经过测试和工作