regex打印主机名后的行直到delemi

2024-10-02 02:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单如下:

-------------------------------------------------------------------------------------------
www.mydomain.de                         UP                            Thu May  8 09:10:57 2014
              HTTPS                    OK                            Thu May  8 09:10:08 2014
              HTTPS-Cert         OK                            Thu May  8 09:10:55 2014
-------------------------------------------------------------------------------------------
www.someotherdomain.de                         UP                            Thu May  8 09:09:17 2014
              HTTPS                    OK                            Thu May  8 09:09:30 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:10 2014
-------------------------------------------------------------------------------------------
www.somedifferentdomain.at                         UP                            Thu May  8 09:08:47 2014
              HTTPS                    OK                            Thu May  8 09:10:26 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:13 2014
-------------------------------------------------------------------------------------------
www.foobladomain.de                         UP                            Thu May  8 09:09:17 2014
              HTTPS                    OK                            Thu May  8 09:09:30 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:08 2014
-------------------------------------------------------------------------------------------
www.snafudomain.at                         UP                            Thu May  8 09:09:17 2014
              HTTP                     OK                            Thu May  8 09:09:42 2014
              HTTPS                    OK                            Thu May  8 09:10:10 2014
              HTTPS-Cert         OK                            Thu May  8 09:10:09 2014
-------------------------------------------------------------------------------------------
www.lolnotanotherdomain.de                         UP                            Thu May  8 09:06:57 2014
              HTTP                     OK                            Thu May  8 09:11:10 2014
              HTTPS                    OK                            Thu May  8 09:11:16 2014
              HTTPS-Cert         OK                            Thu May  8 09:11:10 2014

我有一个函数,它把主机名作为参数并打印出来:

please enter hostname to search for: www.snafudomain.at
www.snafudomain.at                         UP                            Thu May  8 09:09:17 2014

但我想归档的是,在主机名后面的以下行被打印出来,直到分隔符行“----”我现在的函数如下所示:

def getChecks(self,hostname):
    re0 = "%s" % hostname
    mylist = open('myhostlist', 'r')
    for i in mylist:
        if re.findall("^%s" % re0, str(i)):
        print i
        else:
        continue

有什么简单的方法吗?如果有不清楚的地方,请评论。提前谢谢

编辑

要澄清输出,应如下所示:

www.mydomain.de                         UP                            Thu May  8 09:10:57 2014
              HTTPS                    OK                            Thu May  8 09:10:08 2014
              HTTPS-Cert         OK                            Thu May  8 09:10:55 2014
-------------------------------------------------------------------------------------

只想打印出从搜索到的域名行,直到行只有负数。你知道吗


Tags: 函数httpshttpcertwwwdeokmay
2条回答

不使用正则表达式怎么样?你知道吗

def get_checks(self, hostname):
    record = False
    with open('myhostlist', 'r') as file_h:
        for line in file_h:
            if line.startswith(hostname):
                record = True
                print(line)
            elif line.startswith(" -"):
                record = False
                print(line)
            elif record:
                print(line)
import re

def get_checks(hostname):
    pattern = re.compile(r"{}.*?(?= -)".format(re.escape(hostname)), re.S)
    with open("Input.txt") as in_file:
        return re.search(pattern, in_file.read())

print get_checks("www.snafudomain.at").group()

这将返回从www.snafudomain.at开始的所有行,直到找到 -。生成的模式如下

www\.snafudomain\.at.*?(?= -)

Online Demo

我们使用re.escape,因为您的主机名中有.。由于.在正则表达式中有特殊的含义,我们只希望正则表达式引擎将.视为文本点。你知道吗

相关问题 更多 >

    热门问题