在python中从文件中搜索和打印正则表达式

时间:2015-03-31 03:51:12

标签: python

我在python中使用以下代码来搜索文件中的正则表达式,但它会一直返回'无'。不明白它有什么问题。 (编辑 - 添加完整代码)

def process_syslog(file_path):
    with open(file_path, "r") as f:

        for line in f:
           link_down_match = re.search(r'Link Down on en0. (.*$)', line)
           print en0_down_match.group()

link_down_match,始终打印'无'。我正在为以下行做RE匹配:

要匹配的字符串:在en0上链接。原因1(未指定)。

基本上我搜索的文件包含上面提到的多个这样的行' Reason'在某些情况下有所不同(1-10)

这就是我从main(片段)

调用函数的方法
if current_file == 'syslog':
                curr_file_path = dir_path + str(current_file)
                process_syslog(curr_file_path)

这里有什么问题?

我正在处理的文件片段:

Mar 25 06:33:34 ethernet: Status: Link Down on en0. Reason 1 (Unspecified).
Mar 25 06:34:07 ethernet: Status: Link Down on en1. Reason 4 (Unspecified).
Mar 25 06:43:06 ethernet: Status: Link Down on en1. Reason 4 (Unspecified).
Mar 25 06:44:16 ethernet: Status: Link Down on en1. Reason 4 (Unspecified).
Mar 25 06:53:59 ethernet: Status: Link Down on en0. Reason 1 (Unspecified).
Mar 25 06:53:59 ethernet: Status: Link Down on en1. Reason 8 (Unspecified.
Mar 25 16:17:36 ethernet: Status: Link Down on en0. Reason 1 (Unspecified).

3 个答案:

答案 0 :(得分:2)

更新回答删除旧内容:

import re

def process_syslog(file_path):
    with open(file_path, "r") as f:
        for line in f:
            link_down_match = re.search(r'Link Down on en0. (\w+) (\d+)', line)
            if link_down_match == None:
                continue
            print link_down_match.group()

def main():
    process_syslog("syslog.txt")

if __name__ == '__main__':
    main()

当前输出:

  

在en0上链接。原因1

     

在en0上链接。原因1

     

在en0上链接。原因1

答案 1 :(得分:0)

group()更改为groups()

print link_down_match.groups()

或者

print link_down_match.group(1)
print link_down_match.group(2)
print link_down_match.group(n)

答案 2 :(得分:0)

有几件事。

  • 虽然你没有提到它,但我认为你在for循环之前有一个'with open ...'语句?

  • 你确定总是在(\ w +)和(\ d +)之前只有1个空格吗?

  • 您在示例中使用颜色打印了示例文本。我想这是来自Stackoverflow的东西?否则,您的日志中可能会有转义序列。

我测试了r.e.在你的例子上,它在这里运行正常,所以检查以上...