You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式在文件中匹配查找指定关键词内容?

匹配规则与代码调整方案

原方案存在的问题

  • 正则规则缺陷
    • 未匹配方括号闭合标记],匹配范围会溢出到方括号外
    • .+为贪婪匹配,同一行存在多组[]时会跨标签匹配
    • 仅支持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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:00:00