从TXT读取正则表达式作为变量匹配失败问题排查
问题原因及解决方案
核心原因
读取list_pattern.txt每行时,每行末尾会自带换行符\n。比如第一行实际读取到的内容是"Battery Low\n",而非你预期的"Battery Low",用这个带换行的字符串去匹配日志行,自然找不到结果——因为日志里的行不会以这个带换行的字符串结尾。
解决方法
在使用读取到的模式前,去除末尾的换行符(或按需处理首尾空白):
with open(r"C:\Desktop\list_pattern.txt", "r") as file1: for pattern in file1: # 只去除末尾换行符,保留模式本身的前后空格 cleaned_pattern = pattern.rstrip('\n') # 如果模式本身不需要首尾空格,也可以用strip() # cleaned_pattern = pattern.strip() with open(r'C:\Desktop\log.txt',"r") as my_file: for lines in my_file: k = re.search(cleaned_pattern, lines) if k: print("k is", k)
额外优化建议
你的代码每次处理一个模式就重新打开一次log.txt,对于超大日志文件来说效率极低。建议调整为只打开一次日志文件,循环处理所有模式:
# 先读取并预处理所有模式 patterns = [] with open(r"C:\Desktop\list_pattern.txt", "r") as file1: for pattern in file1: patterns.append(pattern.rstrip('\n')) # 仅打开一次日志文件,遍历每行匹配所有模式 with open(r'C:\Desktop\log.txt',"r") as my_file: for line in my_file: for p in patterns: k = re.search(p, line) if k: print(f"匹配到模式{p}: {k}")
内容的提问来源于stack exchange,提问作者mrin9san
相关产品推荐
相关产品推荐

