You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用Notepad++正则修复含额外竖线的13列竖线分隔文件

修复竖线分隔文件的列数异常:统一为13列的正则方案

问题场景

我们有一个以竖线(|)为分隔符的文本文件,导出时未使用文本限定符,导致部分行的文本内容中包含竖线,使得这些行的列数超出了原本固定的13列(部分行多3-4列不等)。需要实现一个适配任意超列数的正则方案,将第10个竖线之后、最后两个竖线之前的所有额外竖线替换为空格,把所有行统一修复为13列。此前尝试的正则仅对14列的行有效,无法适配更多列的情况。

示例

原异常行:

5070599047|SA|03/31/2023 00:00:00|04/03/2023 00:00:00|23121|152|65642.950000|0|0|XP-OFS-222761665|ZIB|BRH|NPAU|31-03-2023|749542|30271246.390000|342

期望修复结果:

5070599047|SA|03/31/2023 00:00:00|04/03/2023 00:00:00|23121|152|65642.950000|0|0|XP-OFS-222761665|ZIB BRH NPAU 31-03-2023 749542|30271246.390000|342

正则解决方案

通用正则(适配多数文本编辑器/命令行工具)

查找模式

\|(?<=^(?:[^|]+\|){10})(?=.*\|[^|]+\|[^|]+$)

替换内容

(输入一个空格即可)

正则逻辑解释

  • \|:精准匹配需要替换的竖线
  • (?<=^(?:[^|]+\|){10}):正向回溯断言,确保当前竖线前已经有10个完整的字段(每个字段为「非竖线内容+竖线」的组合,共10组)
  • (?=.*\|[^|]+\|[^|]+$):正向预查断言,确保当前竖线后至少还有两个完整的字段(对应原文件的最后两列)

这个正则会自动定位所有符合条件的额外竖线,不管中间多多少列,都能一次性替换为空格,最终将所有行统一为13列。

工具使用示例

  • Notepad++:打开目标文件,按Ctrl+H打开替换窗口,勾选「正则表达式」模式,输入上述查找内容和替换空格,点击「全部替换」
  • VS Code:打开文件,按Ctrl+Shift+H打开替换面板,勾选「正则表达式」选项,输入查找内容和替换空格,点击「替换全部」
  • sed(Linux/macOS):执行以下命令批量处理文件:
    sed -E 's/\|(?<=^(?:[^|]+\|){10})(?=.*\|[^|]+\|[^|]+$)/ /g' input.txt > output.txt
    

内容的提问来源于stack exchange,提问作者Emmanuel Salau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:39:50