如何通过正则匹配在TSV匹配内容前后插入换行?
解决TSV引号内制表符替换为换行的正则方案
嘿,我明白你现在的需求——要给TSV里被引号包裹的key=value对之间的硬制表符换成换行,同时不破坏其他列的结构对吧?这事儿用正则就能搞定,我给你捋清楚怎么弄:
核心正则表达式
直接用这个正则匹配要替换的制表符:
(?<="[^"\n]*)\t(?=[^"\n]*")
然后把匹配到的\t替换成\n就行。
正则逻辑拆解
我给你拆解下这个正则各部分的作用,方便你理解:
(?<="[^"\n]*):这是正向反向预查,确保当前制表符的前面是一个双引号,并且引号后面跟着的是「非引号、非换行」的字符——换句话说,我们只匹配引号内部的内容。\t:就是我们要替换的硬制表符本身。(?=[^"\n]*"):这是正向预查,确保当前制表符的后面是「非引号、非换行」的字符,直到遇到闭合的双引号——进一步确认这个制表符确实在引号包裹的Tags列内部。
示例演示
输入TSV数据
ID Name Tags 1 Alice "color=red tag=vip level=3" 2 Bob "color=blue level=2"
替换后输出
ID Name Tags 1 Alice "color=red tag=vip level=3" 2 Bob "color=blue level=2"
注意事项
- 这个方案适用于引号不嵌套的场景,也就是Tags列里的内容不会出现
"key="value""这种嵌套引号的情况——这也是TSV的常规写法,你提到的场景刚好符合。 - 如果你的数据里有换行符混在引号内,可能需要调整
[^"\n]部分,但根据你的描述,应该不需要额外处理。
内容的提问来源于stack exchange,提问作者TryTryAgain
相关产品推荐
相关产品推荐

