如何在原始Python字符串中包含引号?

mpe*_*pen 79 python syntax

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'
Run Code Online (Sandbox Code Playgroud)

那么我们如何获得报价但不是斜线?

请不要建议,r'what"ever'因为那时问题就变成了我们如何包含两种类型的报价?

有关

Ada*_*eld 129

如果要在字符串中使用双引号而不是单引号,则可以使用单引号作为分隔符:

r'what"ever'
Run Code Online (Sandbox Code Playgroud)

如果您的字符串中需要两种引号,请使用三引号字符串:

r"""what"ev'er"""
Run Code Online (Sandbox Code Playgroud)

如果你想在你的字符串中包含两种三引号字符串(极不可能的情况),你就不能这样做,并且你必须使用带有转义的非原始字符串.

  • @Jamby他们确实有一个转义系统,你只需要使用非原始字符串(在它们前面没有r的字符串),它就像[几乎所有其他语言]一样工作(https://docs.python.org /3.1/reference/lexical_analysis.html#string-and-bytes-literals). (5认同)
  • 我也喜欢最后一段......这正是我想弄清楚的.不同报价风格的局限性.我正在比较Python的'r'原始字符串"`和C#的`@"@ - 引用字符串"`和`"""三重引号""" (3认同)
  • 优秀。我花了一秒钟才意识到我也可以制作三重引号字符串。 (2认同)
  • Python newb在这里,有点困惑,是不是"永远"是一个解析错误?你的意思是"永远"吗? (2认同)
  • @MiniQuark:`r''''foo"'''` 和 `r""""foo'"""` 可以很好地生成这样的字符串 (2认同)

Kar*_*arl 10

Python有多种方法可以执行字符串,以下字符串语法允许您使用双引号:

'''what"ever'''
Run Code Online (Sandbox Code Playgroud)

  • 您错过了问题的*原始*部分。 (2认同)

Bak*_*riu 9

如果你需要任何类型的引用(两者都是单引号,双引号和三引号),你可以"组合"(0)字符串:

>>> raw_string_with_quotes = r'double"' r"single'" r'''double triple""" ''' r"""single triple''' """
>>> print raw_string_with_quotes
double"single'double triple""" single triple'''
Run Code Online (Sandbox Code Playgroud)

您也可以将(0)原始字符串与非原始字符串"组合":

>>> r'raw_string\n' 'non-raw string\n'
'raw_string\\nnon-raw string\n'
Run Code Online (Sandbox Code Playgroud)

(0):实际上python解析器连接字符串,它不会创建多个字符串.如果添加"+"运算符,则会创建并组合多个字符串.


mpe*_*pen 5

没关系,答案是原始的三引号字符串:

r"""what"ever"""
Run Code Online (Sandbox Code Playgroud)


cha*_*303 5

由于我偶然发现了这个答案,它对我有很大帮助,但我发现了一个小语法问题,我觉得我应该避免其他人可能遭受的挫败感。正如所描述的,三重引号字符串适用于这种情况,但请注意,如果字符串中所需的 " 出现在字符串本身的末尾:

somestr = """This is a string with a special need to have a " in it at the end""""
Run Code Online (Sandbox Code Playgroud)

您将在执行时遇到错误,因为连续的“”“”(4)引号会让字符串读取器感到困惑,因为它认为它已经到达字符串的末尾,然后在那里找到一个随机的“。您可以验证这一点通过在 4 个引号中插入一个空格,如下所示:“”“”,这样就不会出现错误。

在这种特殊情况下,您需要使用:

somestr = 'This.....at the end"'
Run Code Online (Sandbox Code Playgroud)

或者使用上面描述的方法,用混合的“和”构建多个字符串,然后在事后将它们连接起来。