正则表达式修复换行问题:匹配非指定行首并替换换行为退格
修复CSV异常换行的正则解决方案
问题分析
你需要修复CSV中的异常换行:只有以SOMEWORD开头的行是合法行,其余行首的换行属于异常,需要将这些断行合并到上一行,同时保留完整数据。之前用\n[^SOMEWORD]的问题在于:
[^SOMEWORD]是匹配非S/O/M/E/W/O/R/D单个字符,而非“不以SOMEWORD开头”,逻辑完全错误- 这个正则会吃掉换行后的第一个字符,导致数据丢失
- 无法区分“正常行首的换行”和“异常换行”
正确正则方案
匹配正则
\n(?!SOMEWORD)
\n:匹配目标换行符(?!SOMEWORD):负向前瞻断言,确保换行后的内容不是以SOMEWORD开头,精准定位异常换行
替换内容
根据你的示例需求,替换为:
,
(逗号加空格,让断开的字符串自然衔接)
扩展场景处理
如果异常换行后可能带有空格(比如"1333333\n 4444"),可以调整正则匹配换行后的任意空白字符,避免残留空格:
\n\s*(?!SOMEWORD)
替换内容依旧用, 即可,最终会得到"1333333, 4444"。
示例验证
输入片段:
SOMEWORD,111111,22222222,null,null,"1333333 4444",55555,66,null,7777777,8888 99999,null,null,null,0,null,false,false,1212121,null,null,null,false,null,null,333333,null SOMEWORD,111111,22222222,null,null,"1333333 4444",55555,66,null,7777777,8888 99999,null,null,null,0,null,false,false,1212121,null,null,null,false,null,null,333333,null
经过替换后得到期望输出:
SOMEWORD,111111,22222222,null,null,"1333333, 4444",55555,66,null,7777777,8888 99999,null,null,null,0,null,false,false,1212121,null,null,null,false,null,null,333333,null SOMEWORD,111111,22222222,null,null,"1333333, 4444",55555,66,null,7777777,8888 99999,null,null,null,0,null,false,false,1212121,null,null,null,false,null,null,333333,null
内容的提问来源于stack exchange,提问作者Lynx
相关产品推荐
相关产品推荐

