sublime text 不支持真正列提取,因 re2 引擎禁用非贪婪量词且无 csv 解析能力;稳妥正则为 ^1,(1),.*$,需手动清理前后内容;批量导出需两步替换,并注意编码、bom、换行等边界问题。, ↩

Sublime Text 无法真正“抽取列”,它没有 CSV 解析能力;所谓“抽第二列”,本质是用正则手动锚定、捕获、再人工整理——写错一个字符,结果就全空或错位。
为什么 ^.*?,(.*?),.*$ 在 Sublime 里根本匹配不了
这个写法在 Notepad++ 或 VS Code 里可能跑得通,但在 Sublime(v4+ 默认 RE2 引擎)里会直接报 Invalid regular expression。原因很实在:
- RE2 不支持非贪婪量词
*?和+?,一出现就语法错误 - CSV 中只要有一处带引号的逗号(如
"a,b",42,"c"),这正则立刻跨字段错捕 - 即使你绕过语法错误写了
^.*,(.*),.*$,它也会因贪婪吞掉所有中间内容,$1拿到的是最后一段,不是第二列
真正能用的第二列提取正则:^[^,]*,([^,]*),.*$
这是目前最稳、最直白、适配绝大多数干净 CSV 的写法(无嵌套逗号、无引号包裹):
-
^[^,]*:从行首开始,吃掉第一个逗号前所有非逗号字符(安全替代.*?) -
,([^,]*):明确匹配第一个逗号,然后捕获紧随其后、直到下一个逗号前的所有内容 -
,.*$:吃掉剩余部分,确保整行被覆盖,避免漏行 - 必须勾选右下角
.*图标启用正则模式 - 按
Ctrl+F→ 输入该正则 → 点Find All→ 立刻按Ctrl+L(选整行)→ 再按Ctrl+Shift+L(拆多光标)→ 此时所有光标停在行首,删掉第一段和第一个逗号,再删掉第二个逗号及之后全部内容,就只剩第二列
跨文件批量导出某列?别指望 Find in Files 直接给你纯列
Ctrl+Shift+F 的搜索结果面板只输出 文件名:行号:整行内容,不展示捕获组,$1 在那里完全无效。想批量拿到第二列,得走两步:
- 先在
Find in Files里搜^[^,]*,([^,]*),.*$,复制全部结果(含路径前缀)到新文件 - 在新文件里打开
Ctrl+H替换面板,启用正则,查找:^[^:]+:\d+:[^,]*,([^,\r\n]*),替换为:$1 - 注意:这个查找正则依赖
\r\n行尾,Windows 用户必须保留;macOS/Linux 用户要把\r\n换成\n - 最后用
Ctrl+H清掉空行:^\s*$→ 替换为空(勾选正则)
最容易被忽略的三个边界问题
90% 的“正则写对了但没结果”,其实卡在这三处:
- 文件编码不是 UTF-8:中文字段乱码,
^[^,]*会卡在半个汉字上,匹配中断——用File → Reopen with Encoding → UTF-8强制重载 - 行首有 BOM 或空格:
^锚定失效,匹配不到——把正则改成^\s*[^,]*,\s*([^,\r\n]*) - 字段本身含换行或引号:Sublime 正则根本不处理 CSV 语法,这种数据请立刻切到
pandas或csvkit,别硬刚











