用Alt+鼠标拖选做列编辑最稳,需关闭自动换行、按住Alt垂直拖选目标列范围后删除,适用于混用空格/制表符、含中文或emoji的场景,正则仅适用于分隔符明确且字段内不含分隔符的CSV/TSV。

用Alt+鼠标拖选做列编辑最稳
Notepad++ 没有“删第 N 到 M 列”一键命令,所谓“中间特定位置”,本质是物理列范围删除——必须靠列编辑模式,不是正则能干净解决的场景。正则在混用空格/制表符、含中文或 emoji 时极易错位,而列编辑所见即所得,不解析字符语义,只按显示器坐标删。
操作前务必关闭「自动换行」(View → Word wrap 不勾选),否则纵向拖选会因折行跳列;按住 Alt 键不放,鼠标从目标起始列(比如第 10 列)按下,垂直向下拖到最后一行对应列(比如第 15 列),松手后直接按 Delete 或 Backspace 即可。
- 行尾不足目标列数的,删到行尾为止,不会报错
- 拖选时若松开
Alt再按键,选区立即消失——必须一气呵成 - 如果文件里缩进用的是制表符,且宽度设为 4,那么第 10 列实际可能是第 3 个制表符后的第 2 个字符,建议先开启「视图 → 显示符号 → 显示空格与制表符」确认真实布局
正则删中间列只适用于分隔符明确的文本
只有当你要删的是“第 N 个字段”(如 CSV 第 3 列),而非屏幕上的第 N 列,才考虑正则。它依赖分隔符严格、字段内不含分隔符这两个前提,否则匹配立刻失准。
例如删以逗号分隔的 CSV 中第 3 列:^([^,]*,){2}([^,]*),(.*)$ 替换为 ;删 TSV 第 2 列:^([^\t]*\t){1}([^\t]*)\t(.*)$ 替换为 。
- 必须取消勾选「. 匹配换行符」,否则
.*可能跨行吞掉整块内容 - 字段内含逗号(如
"a,b",c,d)时,正则完全失效,别硬套 - 混用空格和制表符作分隔?先统一格式再处理,或直接切到列编辑
删中间固定长度但起始位置不齐?先对齐再动手
像日志中时间戳后跟不定长消息,想统一删掉“第 24 到 30 字符”,但有些行开头有 `[INFO]`、有些是 `[ERROR]`,导致起始列偏移——这时不能硬拖,得先归一化。
推荐两步走:先用正则把行首不一致的部分标准化,再列编辑。例如把所有行首 `[.*?] ` 替换为空,让后续内容对齐;或者用 编辑 → 行操作 → 修剪首尾空格 清掉浮动空格。
- 对齐后开启「显示空格与制表符」,肉眼确认第 24 列是否真落在目标字符上
- 大文件慎用正则批量替换行首,建议先「查找全部」预览匹配行数,避免误伤
- 如果原始格式实在混乱,导出用
cut -c24-30 --output-delimiter="" input.txt(Linux/macOS)或 PowerShell 的Substring()更可控
容易被忽略的细节:BOM 和 Unicode 零宽字符
文件开头若有 BOM(\xEF\xBB\xBF),它占 3 字节但不显示,会导致你目测的“第 10 列”实际是第 13 列;同理,零宽空格(\u200B)、零宽非连接符(\u200C)也会悄悄挤占列位置,让拖选偏移。
遇到删不准的情况,先搜 \x{EFBBBF} 或 \u200B 看是否存在——Notepad++ 正则支持 \x{...} 和 \u... 写法,但需勾选「正则表达式」模式。
- BOM 必须单独删:查找
\xEF\xBB\xBF,替换为空,再执行列编辑 - 零宽字符无法通过肉眼定位,建议用「搜索 → 查找 → 查找下一个」逐个确认
- 一旦发现这类不可见字符,说明文本来源可能来自网页或富文本粘贴,后续处理前最好先做一次「编码 → 转为 UTF-8 无 BOM」


















