繁体   English   中英

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

[英]Searching and printing regular expression from a file in python

我在python中使用以下代码在文件中搜索正则表达式,但它始终返回“ None”。 不明白这是怎么回事。 (编辑-添加完整代码)

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上的Down Down。 原因1(未指定)。

基本上,我正在搜索的文件包含上面提到的多行,其中“原因”在某些情况下有所不同(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).

更新的答案删除了旧内容:

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

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)

几件事。

  • 尽管您没有提到它,但我想您在for循环之前有一个“ with open ...”语句?

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

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

我在您的示例中测试了re,它在这里可以正常运行,因此请检查以上内容...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM