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

Python使用正则表达式搜索文件匹配指定ID提取对应行问题咨询

错误原因分析
  • re.findall 入参规则使用错误:该方法的入参顺序为「正则表达式」「待匹配的字符串」「匹配标志位」,原代码直接传入ID列表和文件名变量,完全不符合方法调用要求,是报错的直接原因
  • 变量名不统一:文件名提前赋值给了f变量,后续open(file)中的file属于未定义变量
  • 逻辑顺序错误:没有逐行读取文件内容的前置逻辑,提前调用正则匹配方法无法得到正确结果
解决方案

方案1:正则匹配实现(符合你要通过正则搜索的需求)

利用正则行首锚定规则,拼接ID列表生成匹配规则,逐行校验:

import re

file_path = "bdata.txt"
statids = ["85", "106", "140", "172", "337"]
# 构造正则规则,re.escape避免特殊字符导致匹配异常
id_pattern = re.compile(r'^{"id": "(' + '|'.join(map(re.escape, statids)) + r')"}')

with open(file_path, 'r', encoding='utf-8') as f:
    for line in f:
        stripped_line = line.strip()
        if not stripped_line:
            continue
        # 匹配行首符合规则的内容
        if id_pattern.match(stripped_line):
            # 此处stripped_line就是完整匹配行,可直接用于后续处理
            print(stripped_line)

方案2:JSON解析实现(更稳定,适合整行为合法JSON的场景)

如果每行内容都是合法的JSON结构,直接解析后判断ID字段,不需要手写正则,容错率更高:

import json

file_path = "bdata.txt"
# 转为集合查询效率更高
statids = {"85", "106", "140", "172", "337"}

with open(file_path, 'r', encoding='utf-8') as f:
    for line in f:
        stripped_line = line.strip()
        if not stripped_line:
            continue
        try:
            row_data = json.loads(stripped_line)
            if str(row_data.get("id", "")) in statids:
                # 可直接用row_data对象的字段存入类,无需手动拆分内容
                print(stripped_line)
        except json.JSONDecodeError:
            # 跳过格式非法的行
            continue

内容的提问来源于stack exchange,提问作者SGT Anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:27:04