应分两步:先用^\s*$删纯空行,再用^[ \t""]*(?:[ \t""]*,[ \t""]*)*[ \t"]*$匹配csv空值行;需注意bom、全角符号及多行字段等陷阱。

Sublime Text 处理 CSV 文件不能靠“自动识别字段”,所有清洗、提取、对齐动作都依赖你控制正则边界和编辑模式——否则一删就漏、一对就歪、一提就跨行。
怎么安全删掉 CSV 里的空值行(不是纯空行)
CSV 的“空值行”指整行只含逗号、引号、空格、制表符,比如 ,,,、"","",""、, ,。直接用 ^\s*$ 会漏掉它们,还可能误吞换行符。
- 分两步操作:先用
^[ \t]*$删纯空行(只含空格/Tab),避免干扰后续匹配 - 再用
^[ \t""]*(?:[ \t""]*,[ \t""]*)*[ \t""]*$匹配空值行——它明确限定字符集,不碰换行符,也不贪心匹配 - 注意 BOM:
\ufeff常卡在行首让^失效,替换前先搜^\ufeff并删掉,或把正则改成^[\ufeff \t""]*(?:[\ufeff \t""]*,[\ufeff \t""]*)*[\ufeff \t""]*$ - 全角逗号
,或中文引号“”不会被匹配,必须显式加进字符类,如[,,]、["“”]
如何提取某几列(比如第2、第5、第7列)
别信 Ctrl+D 或正则一步提取列——CSV 字段内含逗号、引号、换行时,正则无法语义解析,只会按字面切开。真正可控的是矩形选择 + 手动定位。
- 确保 View → Word Wrap 关闭,字体设为等宽(如 Fira Code)
- 按住
Alt(Windows/Linux)或Option+Shift(macOS),鼠标垂直拖选目标列区域 - 如果字段含中文,列会错位——先用正则
"[^"]*"替换为占位符(如"CN_FIELD"),操作完再批量换回 - 字段含引号内逗号(如
"Smith, John",25)?必须预处理:查找,(?=(?:[^"]*"[^"]*")*[^"]*$),可把外部逗号临时替换成特殊标记(如|),再列选,最后还原
为什么 $1 在 Replace in Files 里不生效
Sublime 的 Replace in Files(Ctrl+Shift+H)面板不支持捕获组引用,$1 会被当字面量输出。这不是你正则写错了,是功能限制。
-
$1只在当前文件的Replace面板(Ctrl+H)中有效,且必须点亮右下角.*图标启用正则模式 - 跨文件替换想保留结构?先用
Find in Files(Ctrl+Shift+F)定位到目标文件+行,再逐个打开,用 Ctrl+H +$1替换 - 若需批量加前缀(如给每行开头加
id:),用Alt+F3先匹配行首^,再按←移光标到行最左,直接输入前缀——比依赖$1更稳 - 捕获组编号从左到右计数,嵌套也计入;
((\w+))中外层是$1,内层是$2
多行字段、换行符、编码问题怎么避坑
真实 CSV 常含换行字段("field\nwith break")、混合换行符(\r\n vs \n)、BOM 或 GBK 编码,这些都会让正则锚点失效或匹配偏移。
- Sublime 默认
.不匹配换行符,要跨行匹配必须勾选. matches newline(或用[sS]替代.) - Windows 下
$停在\r前,建议统一用\R(Sublime 内置通用换行符)代替$ - 乱码时别硬调正则——先点右下角编码名 →
Reopen with Encoding,依次试UTF-8 with BOM、GBK、Windows-1252,确认后再Save with Encoding - 字段含换行?正则
"([^"]*\n[^"]*)"可简单替换为"$1"(把换行替为空格),但必须备份;复杂场景请交给pandas.read_csv()
最常被忽略的不是正则写法,而是操作顺序:先清 BOM 和编码,再统一换行符,然后删空行,最后处理字段内容——跳过任何一环,后面所有正则都可能在错误上下文中运行。











