应使用正则^([^;#\[]+)\s*=\s*(.*)$提取ini键值对,避开注释和空行;节名用^\[([^\]]+)\]$匹配,复制前需find all并清理杂乱格式。

怎么用正则提取 INI 文件里的 key=value 对
Sublime 本身不解析 INI,但能用正则快速捞出干净的键值对。关键不是匹配整行,而是精准捕获 key 和 value 两部分,避开注释和空行。
常见错误现象:写 ^.*=.*$ 结果把注释行 ; port=3306 也抓进来,或者把跨行的 value(如多行字符串)漏掉。
- 正确写法:
^([^;#].*)=(.*)$——^锚定行首,[^;#]排除以分号或井号开头的行,=是分隔符,前后用()捕获 - 若要跳过空白行,加
\S限定非空白起始:^(\S[^;#]*)=(.*)$ - 想排除带空格的 key(如
host = localhost),改用^(\w+)\s*=\s*(.*)$,\w+确保 key 是纯字母数字 - 复制前务必点
Find All(Alt+Enter),再 Ctrl+C;否则只复制第一个匹配
如何安全提取节名 [section] 而不误伤注释或嵌套内容
节名看似简单,但 ^\[.*\]$ 容易匹配到注释里的 #[section] 或字符串里的 "[section]",尤其在混合文本中。
真正可靠的写法必须满足三个条件:行首、无前置空白、无注释符号、括号成对闭合。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 推荐正则:
^\[([^\]]+)\]$——^锚定行首,\[和\]字面匹配方括号,[^\]]+表示中间不能出现],避免跨节捕获 - 如果文件含 Windows 换行符
\r\n,且你没切换换行格式,需显式兼容:^\[([^\]]+)\]\r?$ - 别用
.*匹配节名,它会吞掉后面所有内容直到最后一个],导致截断 - 测试时先关闭语法高亮(Ctrl+Shift+P →
Set Syntax: Plain Text),避免插件干扰换行识别
为什么 $1 在 Replace in Files 里永远为空
这不是你正则写错了,是 Sublime 的硬限制:Replace in Files(Ctrl+Shift+H)面板完全不支持 $1、$2 这类捕获组引用。它只当普通字符串处理,填 $1 就真输出字面量 $1。
想批量提取字段,必须绕开 Replace in Files,改走 Find in Files(Ctrl+Shift+F)路径。
- 在 Find in Files 中输入正则,例如:
^\[([^\]]+)\]$|^\s*(\w+)\s*=\s*(.*)$(用|同时匹配节名和键值对) - 搜索后结果页显示为
file.ini:3:[database]或file.ini:4:host=localhost - 全选复制,粘贴到新标签页,再用
^[^:]+:\d+:\s*(.*)$替换为$1,就能剥离路径和行号 - 注意:Find in Files 不支持
$1,但后续在新文件里做单文件替换时,$1是有效的
提取后怎么清理杂乱格式并转成结构化数据
复制出来的结果通常是混杂的:可能带多余空格、空行、大小写不一致、甚至中文全角空格(\u3000)。直接当数组用会出错。
最易被忽略的是空白字符兼容性——Sublime 默认的 \s 不匹配中文全角空格、不间断空格等,清洗会失败。
- 统一清理空白:用正则
[ \t\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+替换为单个半角空格 - 去重前先转小写:
Ctrl+Shift+P → Convert Case to: Lowercase,否则Host和host被视为不同项 - 生成 JSON 数组:先手动补
["开头、"]结尾,再用\n→", "替换,最后修正首尾引号和逗号 - 若原始 INI 含引号包裹的 value(如
name="Alice & Bob"),提取时必须用"([^"]*)"捕获,否则&会被截断










