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

如何用Python正则将拼接字符串的引号替换为C++原始字符串分隔符?

解决C++拼接字符串转原始字符串的正则方案

先明确输入输出的典型场景,确保匹配你的需求:

输入示例

// 带外层括号的拼接
("This is a \"quoted\" word" " followed by another part")
// 无外层括号的直接拼接
"Line 1\\nLine 2" " and more text with \"escaped\" quotes"

期望输出

// 对应带括号输入的输出
R"(This is a "quoted" word followed by another part)"
// 对应无括号输入的输出
R"(Line 1\nLine 2 and more text with "escaped" quotes)"

方案1:支持回调函数的编程场景(Python/Node.js等)

这类场景可以利用正则匹配+自定义逻辑拼接,处理最复杂的情况:

匹配正则

^\(\s*(?:"(?:\\.|[^"])*"\s*)+\)$|(?:"(?:\\.|[^"])*"\s*)+

这个正则同时匹配两种情况:带外层括号的拼接字符串、无括号的直接拼接字符串。

替换逻辑代码(Python示例)

import re

def convert_to_raw_string(match):
    # 提取所有拼接片段的内容(去掉引号)
    segments = re.findall(r'"((?:\\.|[^"])*)"', match.group())
    # 拼接所有片段并包裹成原始字符串格式
    return f'R"({"".join(segments)})"'

# 测试带括号的情况
input_with_paren = '("Hello \"world\"" " this is a" " concatenated string")'
print(re.sub(r'^\(\s*(?:"(?:\\.|[^"])*"\s*)+\)$', convert_to_raw_string, input_with_paren))

# 测试无括号的情况
input_no_paren = '"Line 1\\nLine 2" " and more text with \\"escaped\\" quotes"'
print(re.sub(r'(?:"(?:\\.|[^"])*"\s*)+', convert_to_raw_string, input_no_paren))

方案2:编辑器纯正则替换(VS Code/Sublime Text等)

如果只用编辑器的替换功能,分三步操作:

  1. 移除外层括号(如果有)

    • 查找:^\(\s*(.*?)\s*\)$
    • 替换:$1
      执行一次即可去掉拼接字符串外层的括号。
  2. 合并拼接的字符串片段

    • 查找:"((?:\\.|[^"])*)"\s*"
    • 替换:$1
      重复点击「替换全部」,直到没有匹配结果,这一步会把所有"a" "b"合并成ab的内容。
  3. 转换为原始字符串格式

    • 查找:"((?:\\.|[^"])*)"
    • 替换:R"($1)"
      执行一次即可把合并后的普通字符串转为C++原始字符串。

关键正则说明

  • (?:\\.|[^"])*:核心匹配规则,用来正确捕获字符串内容——\\.匹配转义字符(包括\"、\\等),[^"]匹配非引号的普通字符,避免错误截断转义引号。
  • 所有操作都会保留原字符串中的转义语义:比如原字符串的\"会在原始字符串中自动变为"(符合C++原始字符串的语法要求),\\会保留为\\,确保最终字符串的实际内容和原拼接字符串完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:07:03