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

如何用正则替换移除双引号内所有分号?(SQL场景)

问题描述

现有如下字符串(为便于阅读添加换行,实际为单个字符串):

"someField0";"some value1; some value2; some value3; some value4";
"someField1";"some value1; some value2; some value3";
"someField2";"some value1; some value2";
"someField3";"some value123";

需要通过正则替换移除双引号包裹部分内的所有;字符,期望结果如下:

"someField0";"some value1 some value2 some value3 some value4";
"someField1";"some value1 some value2 some value3";
"someField2";"some value1 some value2";
"someField3";"some value123";

此前尝试的正则("[^",]+);([^"]+")仅能移除单次出现的分号,替换为$1 $2,无法处理所有情况。需要纯正则方案用于SQL查询的regex_replace函数,作为复杂解析语句的一部分。

可行正则替换方案

可以通过精准定位双引号内部的分号并替换为空格实现,核心是避免修改引号外的分隔分号。

通用适配正则(支持转义双引号场景)

适用于包含转义双引号(\")的字符串,可兼容PostgreSQL、MySQL 8.0+等多数支持正则的SQL数据库:

  • 正则模式:("(?:[^"]|\\")*?);(?=(?:[^"]|\\")*")
  • 替换字符串:$1

逻辑说明

  1. ":匹配双引号开头;
  2. (?:[^"]|\\")*?:非贪婪匹配引号内的任意内容,包括非引号字符和转义引号,避免跨引号匹配;
  3. ;:定位需要替换的目标分号;
  4. (?=(?:[^"]|\\")*"):正向预查,确保分号后存在对应的闭合双引号,保证分号处于引号内部。

SQL示例

  • PostgreSQL(需指定g全局替换标志):
    SELECT regex_replace(your_column, '("(?:[^"]|\\")*?);(?=(?:[^"]|\\")*")', '\1 ', 'g') FROM your_table;
    
  • MySQL 8.0+(默认全局替换):
    SELECT REGEXP_REPLACE(your_column, '("(?:[^"]|\\")*?);(?=(?:[^"]|\\")*")', '$1 ') FROM your_table;
    

简化版正则(无转义双引号场景)

如果字符串中不存在转义双引号,可使用更简洁的规则:

  • 正则模式:(".*?);(?=.*?")
  • 替换字符串:$1

这个版本通过非贪婪匹配引号内的内容,快速锁定引号内部的分号进行替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:09:59