Sublime Text提取CSV或Excel导出文本指定列需手动正则处理:制表符分隔用^(1\t){2}(2)捕获第3列,带引号CSV用^(3|"4"),\s(3|"4*")捕获第2列,须规避非贪婪限制、锚定行首并预处理异常字符。\t ↩\t ↩", ↩" ↩

Excel导出文本通常是制表符或逗号分隔,不是标准CSV
直接用 ^.*$ 或 .* 匹配整行会失败——因为 Excel 导出的纯文本(如“另存为 .txt”)默认用 \t 分隔,且可能含换行、引号、空格甚至未转义的制表符。Sublime 的正则引擎不解析 CSV 语义,只做字面匹配,所以得先确认分隔符类型:File → Save As → 查看后缀和编码,常见是 UTF-8 + \t;若保存为 CSV,则可能是 ,,但字段含逗号时 Excel 会加双引号,比如 "Smith, John"。
提取第3列(制表符分隔):用 ^([^\t]*\t){2}([^\t]*)
这个模式跳过前两列(每列后跟一个 \t),捕获第3列内容。注意点:
-
[^\t]*表示“非制表符的任意字符(含空)”,比.*?更安全,避免跨列匹配 - 开头必须有
^锚定行首,否则可能在中间匹配到错误的\t - 如果第3列为空,
[^\t]*仍能匹配零次,结果为空字符串——符合预期 - Sublime 默认不开启
. matches newline,所以无需担心跨行干扰
提取带引号的CSV第2列:用 ^([^",]*|"[^"]*"),\s*([^",]*|"[^"]*")
Excel 导出的 CSV 若含逗号或换行,会用双引号包裹字段,且内部引号转义为两个双引号("")。但 Sublime 正则不支持递归或平衡组,无法完美解析嵌套引号。务实做法是:只处理「无换行、引号仅用于包裹、内部无双引号」的常见情况:
- 第一组
([^",]*|"[^"]*")匹配第1列:要么不含,和",要么是"...形式 - 逗号后允许
\s*(空格/制表符),再捕获第2列——这就是你要的数据 - 实际使用时,把光标放在目标列位置,按
Ctrl+H→ 勾选Regular expression→ 粘贴该表达式 → 在Replace框填$2即可批量提取 - 若遇到
"a""b"这类转义引号,此正则会截断,此时需先用"([^"]|"")*"预处理清洗,但多数导出数据不含这种深度转义
替换后保留原格式结构:别漏掉换行符和末尾空行
提取列数据常用于生成列表或导入其他工具,但容易忽略原始文本的结构残留:
- 用
Find All再Copy会丢失换行对应关系;推荐用Replace All把整行替换成目标列 +\n,例如替换为$2\n - Excel 导出文本末尾常带空行,Sublime 的
$不匹配文件末尾的换行,所以最后可能多出一行空;手动删或加\n*$后置清理 - 如果目标列含制表符(比如用户手动在 Excel 单元格里打了
\t),它会被当成分隔符误切——这时得先在 Excel 里清除不可见字符,或改用列选择模式(Ctrl+Shift+↑/↓)人工框选
最麻烦的永远不是正则写法,而是 Excel 自己对分隔符和引号的隐式处理逻辑;每次提取前,先用 View → Show Console 粘贴几行样本,肉眼确认分隔方式和异常字符,比调十次正则更快。


















