Python正则表达式读取/etc/resolv.conf并仅返回ip地址,认为它就快到了,

Python正则表达式读取/etc/resolv.conf并仅返回ip地址,认为它就快到了,,python,regex,linux,ip,Python,Regex,Linux,Ip,我一直在写一个python脚本,但我对某个函数有一个问题,它应该打开/etc/resolv.conf文件,逐行读取,然后只返回ip地址。虽然它看起来是在查找ip地址,但它并没有告诉我内存的哪一部分,也没有告诉我如何让它告诉我匹配的字符串本身 下面是函数: def get_resolv(): nameservers=[] rconf = open("/etc/resolv.conf","r") line = rconf.readline() while line:

我一直在写一个python脚本,但我对某个函数有一个问题,它应该打开/etc/resolv.conf文件,逐行读取,然后只返回ip地址。虽然它看起来是在查找ip地址,但它并没有告诉我内存的哪一部分,也没有告诉我如何让它告诉我匹配的字符串本身

下面是函数:

def get_resolv():
    nameservers=[]
    rconf = open("/etc/resolv.conf","r")
    line = rconf.readline()
    while line:
        try:
            ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b",line)


        except:
            ip = "none set"
        print ip
        nameservers.append(ip)
        line= rconf.readline()

    return nameservers
以下是调用时的输出:

None
<_sre.SRE_Match object at 0xb76964b8>
<_sre.SRE_Match object at 0xb7696db0>

重新搜索将返回一个。这是一个具有多个属性的对象,这些属性告诉您有关匹配的信息

要获得完整的匹配文本,请使用
ip.group(0)
ip.group()

另外,
re.search
如果没有匹配项,则不会引发异常,而是返回
None
。因此,您的代码应该如下所示:

ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b",line)

if ip is None:
    ip = "none set"

re.search
正在返回一个。这是一个具有多个属性的对象,这些属性告诉您有关匹配的信息

要获得完整的匹配文本,请使用
ip.group(0)
ip.group()

另外,
re.search
如果没有匹配项,则不会引发异常,而是返回
None
。因此,您的代码应该如下所示:

ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b",line)

if ip is None:
    ip = "none set"
另一种方式

>>> data=open("/etc/resolv.conf").read().split()
>>> for item in data:
...     if len( item.split(".") ) == 4:
...          print item
...
192.168.0.1
另一种方式

>>> data=open("/etc/resolv.conf").read().split()
>>> for item in data:
...     if len( item.split(".") ) == 4:
...          print item
...
192.168.0.1

是的,将行更改为这个ip=re.search(r“\b(?[0-9]{1,3}\){3}[0-9]{1,3}\b”,行)。group()现在工作得很好,非常感谢@Shutupsquare-这是可行的,但可能并不理想。当您没有匹配的
ip
时,将是
None
,然后当您尝试运行
group()
方法时,您将得到一个异常,您的
try except
将捕获该异常。我想最好检查一下
ip
是否为
None
。是的,p将行更改为这个ip=re.search(r“\b(?[0-9]{1,3}\){3}[0-9]{1,3}\b”,line)。group()现在工作得很好,非常感谢@Shutupsquare-这是可行的,但可能并不理想。当您没有匹配的
ip
时,将是
None
,然后当您尝试运行
group()
方法时,您将得到一个异常,您的
try except
将捕获该异常。我想最好检查一下
ip
是否为
None
。只需检查一下,它也能完美地满足我的要求。非常感谢你,这比公认的答案更好,因为它更像是一种Pythonic“duck typing”方法,而且没有regex。如果字符串看起来像IP,那么它就是IP。只需对item.split(“.”)中的i进行一个额外的测试
all(i实例(i,int))
就可以改进它。只需检查一下这个,它也可以完美地满足我的要求。非常感谢,这比公认的答案更好,因为它更像是一种Pythonic“duck typing”方法,并且没有正则表达式。如果字符串看起来像IP,那么它就是IP。只有对item.split(“.”)中的i进行额外的测试
all(isinstance(i,int))才能改进它。