【问题标题】:regex to print out lines after hostname until delemiter正则表达式打印出主机名之后的行直到分隔符
【发布时间】:2014-06-25 15:42:42
【问题描述】:

我有一个列表如下:

-------------------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------------

只想打印出从搜索域名到只有减号的行。

【问题讨论】:

    标签: python regex list


    【解决方案1】:
    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,因为您的主机名中包含.。由于. 在正则表达式中具有特殊含义,我们只希望正则表达式引擎将. 视为文字点。

    【讨论】:

    • 看起来不错,但不完全是我的意思。我已经编辑了我的帖子以澄清
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多