如何创建包含引号的原始字符串字面量?
没问题,要输出 ${foo"bar"} 这种包含双引号的原始字符串,其实有几种直观的解决办法,根据你的使用场景选就行:
方法一:用单引号包裹原始字符串
Python的原始字符串(r"" 语法)支持单引号和双引号互相嵌套,所以用单引号包裹的原始字符串里可以直接写双引号,完全不需要转义:
target_str = r'${foo"bar"}' print(target_str) # 输出:${foo"bar"}
这种方式最简洁,也是最推荐的写法,原始字符串会原样保留所有字符,包括双引号。
方法二:结合f-string保留格式(不解析变量)
如果你是想在f-string里保留 ${} 的格式(就像你提到的 ${r"${foo}"} 输出 ${foo}),同时包含双引号,可以用原始f-string(rf"")配合大括号转义(f-string里用两个 {{}} 输出单个 {}):
# 单引号版本 target_str = rf'${{foo"bar"}}' print(target_str) # 输出:${foo"bar"} # 三重双引号版本(适合同时包含单双引号的复杂场景) target_str = rf"""${{foo"bar"}}""" print(target_str) # 输出:${foo"bar"}
这里的 rf 标记让字符串既是原始字符串(不处理转义)又是f-string,{{}} 用来避免f-string解析里面的变量,双引号则因为在单引号/三重双引号的包裹下直接被保留。
方法三:转义引号(不推荐)
如果一定要用双引号包裹原始字符串,也可以用反斜杠转义双引号——虽然原始字符串通常不需要转义,但这个场景下是可行的:
target_str = r"${foo\"bar"}" print(target_str) # 输出:${foo"bar"}
不过这种写法可读性较差,除非必要,否则优先选前两种方法。
内容的提问来源于stack exchange,提问作者Robson Hermes




