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

如何用Python正则匹配并删除INI文件中的[FILES]多行区块

解决INI文件[FILES]区块正则匹配错误问题

问题原因

你当前的正则存在两个核心问题:

  1. 没有设置匹配停止边界,匹配到[FILES]后不会自动在下一个区块开头停止
  2. 字符范围[$-_a-zA-Z0-9\/\.\n\r]中,$-_的范围在ASCII编码中包含了[字符,会把后续区块的[PQR]这类开头也纳入匹配范围,导致吞掉后续所有内容

修正方案

使用非贪婪匹配+正向前瞻断言限制匹配范围,仅匹配[FILES]区块本身,遇到下一个[开头的区块或者文件末尾就自动停止:
正则表达式为:r'^\[FILES\]\r?\n(?:.*\r?\n)*?(?=\[|\Z)'
参数说明:

  • re.MULTILINE 保证^可以匹配每一行的行首
  • \r?\n 同时兼容Windows和Unix格式的换行符
  • (?:.*\r?\n)*? 非贪婪匹配任意多行内容,非捕获组不占用分组位置
  • (?=\[|\Z) 正向前瞻断言,匹配到下一个[开头的行或者文件结束位置就停止,不会吃掉后续区块内容

完整代码示例

import re
import configparser

# 读取原始INI文件
with open('my.ini', 'r', encoding='utf-8') as f:
    raw_data = f.read()

# 编译正则并删除[FILES]区块
pattern = re.compile(r'^\[FILES\]\r?\n(?:.*\r?\n)*?(?=\[|\Z)', flags=re.MULTILINE)
clean_data = pattern.sub('', raw_data)

# 清理后的数据可直接用configparser正常解析
cfg = configparser.ConfigParser()
cfg.read_string(clean_data)

# 测试解析结果
print(cfg.sections()) # 输出: ['ABC', 'DEF', 'PQR']

内容的提问来源于stack exchange,提问作者A.G.Progm.Enthusiast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:45:03