如何使用正则表达式在文件中匹配查找指定关键词内容?
匹配规则与代码调整方案
原方案存在的问题
- 正则规则缺陷
- 未匹配方括号闭合标记
],匹配范围会溢出到方括号外 .+为贪婪匹配,同一行存在多组[]时会跨标签匹配- 仅支持
murder在murderAttempted之前的顺序,反向顺序无法匹配 - 未限制匹配范围完全在方括号内部
- 未匹配方括号闭合标记
- 代码逻辑缺陷
- 缺少
re、os依赖模块导入 - 函数体内代码缩进错误
- 文件路径直接拼接,根目录无末尾分隔符时会出现路径错误
- 文件打开后未主动关闭,可能出现资源泄漏
- 仅判断文件名包含
txt,会误判xxx.txt1、xxxTxt这类不符合要求的文件
- 缺少
修正后代码
import os import re def func(root_dir): # 正则规则:方括号内同时包含两个关键词,不限制顺序,不跨方括号匹配 pattern = r'\[(?=[^\]]*murder)(?=[^\]]*murderAttempted)[^\]]+\]' for file in os.listdir(root_dir): # 仅匹配后缀为.txt的文件 if file.endswith('.txt'): file_path = os.path.join(root_dir, file) # 用with语法自动管理文件句柄 with open(file_path, 'rt', encoding='UTF8') as f: for line in f: for match in re.finditer(pattern, line): print(match.group())
核心正则说明
\[匹配方括号起始符(?=[^\]]*murder)正向预查:确认当前方括号内存在murder关键词,[^\]]*限定查找范围不超出当前方括号(?=[^\]]*murderAttempted)正向预查:确认当前方括号内存在murderAttempted关键词,两个预查组合不限制关键词的先后顺序[^\]]+匹配方括号内的所有内容\]匹配方括号结束符
内容的提问来源于stack exchange,提问作者SeungWonBang
相关产品推荐
相关产品推荐

