需求:匹配/移除双引号间符合条件的CRLF正则表达式
移除双引号内特定CRLF的正则表达式
正则表达式
(?<="[^"]*[\w\d])\r?\n(?=[\w\d][^"]*")
规则说明
这个正则精准匹配满足所有要求的CRLF:
- 限定在双引号内:通过反向预查
(?<="...)和正向预查(?=...)锁定范围在一对双引号之间 - 左引号与CRLF间至少含一个字母数字:
[^"]*[\w\d]确保左引号到目标CRLF之间,存在至少一个字母数字字符([\w\d]),中间可包含任意非双引号内容 - 右引号与CRLF间至少含一个字母数字:
[\w\d][^"]*确保CRLF到右引号之间,存在至少一个字母数字字符,中间可包含任意非双引号内容 - 匹配同一组双引号内的所有符合项:
[^"]*仅匹配当前双引号对内部的非引号字符,不会跨双引号误匹配
示例验证
针对你提供的示例文本:
"1843","75 x 63 cm.","Bergamot","lb","Set of 6, 2022[CRLF] On paper[CRLF] (each)[CRLF] Numbered","2022"[CRLF] "20500","89 X 28 cm."
- 引号内的3个
[CRLF]会被匹配移除,处理后文本为:"1843","75 x 63 cm.","Bergamot","lb","Set of 6, 2022On paper(each)Numbered","2022"[CRLF] "20500","89 X 28 cm." - 最后一个
[CRLF]因不满足「右引号与CRLF间有字母数字」的条件,不会被匹配
不同环境的使用方法
VSCode中使用
- 打开替换面板(快捷键
Ctrl+H/Cmd+H) - 勾选右上角的「正则表达式」选项(
.*图标) - 查找框输入上述正则,替换框留空
- 点击「替换全部」完成操作
Linux CLI中使用(以sed为例)
需使用支持PCRE的sed版本(带-E参数),执行命令:
sed -E 's/(?<="[^"]*[\w\d])\r?\n(?=[\w\d][^"]*")//g' 输入文件名 > 输出文件名
若处理纯Linux换行符(仅\n),可简化为:
sed -E 's/(?<="[^"]*[\w\d])\n(?=[\w\d][^"]*")//g' 输入文件名 > 输出文件名
内容的提问来源于stack exchange,提问作者Jaume Mal
相关产品推荐
相关产品推荐

