我在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).
答案 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.在你的例子上,它在这里运行正常,所以检查以上...