如何在Notepad++中用RegEx处理管道分隔文件 确保每行仅3个管道
解决方案
直接通过单次正则替换即可实现,核心逻辑是利用你给出的记录起始唯一标识规则判断换行符属于记录内部还是记录结尾,完全规避之前占位符方案的漏洞。
正则匹配规则
匹配项
\r\n(?!\d{2}-\d{4}[A-Za-z]{0,3})
规则说明:匹配所有CRLF换行符,要求该换行符后紧跟的内容不符合「两位数字+横杠+四位数字+最多3个字母」的记录起始格式,这类换行符就是需要替换的列内换行。
如果需要兼容不同系统的换行符(比如纯\n、纯\r),可以把\r\n替换为\R(大部分正则编辑器支持该通用换行匹配符)。
替换为
\.br\
正则配置要求
- 开启多行模式(Multiline),保证
^可以匹配每行的开头位置 - 不需要开启「点匹配新行/DOTALL」选项
不同场景操作指引
场景1:用文本编辑器(如Notepad++、VS Code)处理
- 打开替换窗口,切换到正则表达式模式
- 查找内容输入上述匹配正则,替换内容输入
\.br\ - 点击全部替换即可,10GB以内的文件都可以正常处理。
场景2:用脚本处理超大型文件(10GB以上)
推荐用Python分块处理,避免内存占满,示例代码如下:
import re # 编译正则表达式,开启多行模式 line_pattern = re.compile(r'\r\n(?!\d{2}-\d{4}[A-Za-z]{0,3})', re.M) # 每次读取的块大小,可根据内存配置调整,这里设为10MB CHUNK_SIZE = 10 * 1024 * 1024 with open('源文件路径.txt', 'r', encoding='utf-8') as f_in, open('输出文件路径.txt', 'w', encoding='utf-8') as f_out: while True: chunk = f_in.read(CHUNK_SIZE) if not chunk: break processed_chunk = line_pattern.sub(r'\.br\\', chunk) f_out.write(processed_chunk)
内容的提问来源于stack exchange,提问作者marky
相关产品推荐
相关产品推荐

