[英]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.