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

正则表达式实现:仅转义括号内文本中的单引号为双单引号

解决方案:转义括号内字符串的单引号

需求说明

需要处理格式为 text1 ('text2','te'xt',...,'text') 的文本,仅将括号内单引号包裹的子字符串内部的单引号替换为双单引号(' → ''),括号外及包裹子字符串的单引号保持不变。

实现方案

通过正则匹配结合替换回调的方式,分两步处理:

  1. 匹配整个括号内的内容;
  2. 对括号内每个单引号包裹的子字符串,替换其内部的单引号。

JavaScript 实现

const sourceText = "Some text ('Changes [delete [object] = '1']', 'Changes')";
const escapedText = sourceText.replace(/\((.*?)\)/g, (_, innerContent) => {
  // 处理每个单引号包裹的子字符串
  const processedInner = innerContent.replace(/'(.*?)'/g, (_, str) => {
    return `'${str.replace(/'/g, "''")}'`;
  });
  return `(${processedInner})`;
});

console.log(escapedText);
// 输出:Some text ('Changes [delete [object] = ''1'']', 'Changes')

Python 实现

import re

def process_inner_quotes(match):
    inner_content = match.group(1)
    # 替换子字符串内部的单引号
    processed = re.sub(r"'(.*?)'", lambda m: f"'{m.group(1).replace(\"'\", \"''\")}'", inner_content)
    return f"({processed})"

source_text = "Some text ('Changes [delete [object] = '1']', 'Changes')"
escaped_text = re.sub(r"\((.*?)\)", process_inner_quotes, source_text)

print(escaped_text)
# 输出:Some text ('Changes [delete [object] = ''1'']', 'Changes')

原理说明

  1. 外层正则 \((.*?)\) 非贪婪匹配一对圆括号及其内部的所有内容;
  2. 内层正则 '(.*?)' 匹配括号内每个单引号包裹的子字符串;
  3. 对每个子字符串的内部内容(.*? 捕获的部分),将所有单引号替换为双单引号,再重新用单引号包裹;
  4. 最后将处理后的括号内容放回原文本,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:22:45