如何使用正则表达式提取日志文件中指定内容的日志行?
提取包含特定文本的日志行的正则表达式方案
我有一个日志文件,想要从中提取特定的日志行。我不熟悉正则表达式,之前尝试的格式仅取得了有限效果。请问应使用什么正则表达式来查找包含文本= START BACKUP DETAILS END ==和= START BACKUP DETAILS END =的日志行?
日志示例
06/11/2023 13:41 LocalFileCacheHashDb filterExisting, items contains 577 items 06/11/2023 13:41 LocalFileCacheHashDb < filterExisting(15) 06/11/2023 13:41 BackUpLauncher =============== START BACKUP DETAILS =============== 06/11/2023 13:41 BackUpLauncher startBackup called with 68 06/11/2023 13:41 BackUpLauncher startBackup called with isScheduledSync = true 06/11/2023 13:41 BackUpLauncher startBackup called with isApplicationForeground = false 06/11/2023 13:41 BackUpLauncher =============== START BACKUP DETAILS END =============== 06/11/2023 13:41 BackUpHelper prepareSyncData 06/11/2023 13:42 AssetScannerSdkManager getAndFilterPhotoVideoFolderItem, descriptionItemList contains 570 items 06/11/2023 13:42 AssetScannerSdkManager getLocalMusic, descriptionItemList contains 1 items 06/11/2023 13:42 AssetScannerSdkManager getLocalDocs, descriptionItemList contains 6 items 06/11/2023 13:42 AssetScannerSdkManager getAssets, isRestore = false, descriptionItemList contains 577 items
现有Python代码示例
import re with open('cached_logs.txt', 'r') as text_file: text_file=text_file.read() pattern = r'([M-c])' matches = re.findall(pattern, text_file) with open('cacheOut.txt', 'w') as out: out.write('\n'.join(matches))
解决方案
正则表达式说明
针对你的需求,有两种正则方案可选:
严格匹配指定文本:精准匹配包含
= START BACKUP DETAILS END =或= START BACKUP DETAILS END ==的行^.*= START BACKUP DETAILS END ={1,2}.*$^匹配行开头,$匹配行结尾.*匹配任意字符(除换行)的任意次数={1,2}表示匹配1个或2个等号,覆盖你指定的两种情况
灵活适配日志场景:从日志示例看,目标行前后有大量等号,若只需匹配包含核心字符串
START BACKUP DETAILS END的行,可简化为:^.*START BACKUP DETAILS END.*$这个表达式能匹配所有包含该核心文本的日志行,适用性更强。
修改后的Python代码
替换原有正则逻辑,改用按行读取的方式更高效:
import re # 预编译正则模式,这里选用灵活适配的版本 pattern = re.compile(r'^.*START BACKUP DETAILS END.*$') matches = [] with open('cached_logs.txt', 'r') as text_file: # 逐行读取,避免大文件占用过多内存 for line in text_file: if pattern.match(line): matches.append(line.strip()) with open('cacheOut.txt', 'w') as out: out.write('\n'.join(matches))
代码说明
re.compile预编译正则,提升多次匹配的效率- 逐行读取日志,处理大文件更友好
strip()去除每行末尾的换行符,输出格式更整洁
内容的提问来源于stack exchange,提问作者Eamon M
相关产品推荐
相关产品推荐

