【问题标题】:How to include a quote in a raw Python string如何在原始 Python 字符串中包含引号
【发布时间】:2011-06-05 13:16:19
【问题描述】:

考虑:

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'

那么我们如何得到引号,而不是斜线呢?

请不要建议r'what"ever',因为这样问题就变成了我们如何包含这两种类型的引号?

Related

【问题讨论】:

  • 在原始字符串的激励用例(正则表达式和 Python 以外的其他东西解释反斜杠的其他情况)中,反斜杠很好,因为它将由正则表达式引擎/任何引擎处理。这并不适用于您可能想要使用原始字符串的所有情况,但请确保在尝试删除反斜杠之前考虑它是否适用于您的用例。

标签: python syntax


【解决方案1】:

只是为了包含新的 Python f String 兼容功能:

var_a = 10

f"""This is my quoted variable: "{var_a}". """

【讨论】:

  • f-strings 支持转义,不是吗?所以你可以做f"foo\"bar"
【解决方案2】:

用途:

dqote='"'
sqote="'"

使用“+”运算符和dqotesquote 变量来获得所需的内容。

如果我想要sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/,你可以尝试以下:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'

【讨论】:

    【解决方案3】:

    如果您需要任何类型的引用(单引号、双引号和三引号),您可以“组合”(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'''
    

    您还可以“组合”(0) 个原始字符串与非原始字符串:

    >>> r'raw_string\n' 'non-raw string\n'
    'raw_string\\nnon-raw string\n'
    

    (0):实际上,Python 解析器将字符串连接起来,它不会创建多个字符串。如果添加“+”运算符,则会创建并组合多个字符串。

    【讨论】:

      【解决方案4】:

      Python 有不止一种处理字符串的方法。以下字符串语法允许您使用双引号:

      '''what"ever'''
      

      【讨论】:

      • 您错过了问题的原始部分。
      【解决方案5】:

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

      somestr = """This is a string with a special need to have a " in it at the end""""
      

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

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

      somestr = 'This.....at the end"'
      

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

      【讨论】:

        【解决方案6】:

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

        r'what"ever'
        

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

        r"""what"ev'er"""
        

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

        【讨论】:

        • 优秀。我花了一秒钟才意识到我也可以将三引号字符串变成原始字符串。
        • 我也喜欢最后一段……这正是我想要弄清楚的。不同引用风格的局限性。我正在比较 Python 的 r"raw string" 和 C# 的 @"@-quoted string""""triple quotes"""
        • 这里是Python新手,有点困惑,r'what"ever"不是解析错误吗?你的意思是r'what"ever'
        • @Jamby 他们确实有一个转义系统,您只需将它与非原始字符串(前面没有 r 的字符串)一起使用,它就可以工作like pretty much every other language
        • @MiniQuark: r''''foo"'''r""""foo'""" 可以很好地生成这样的字符串
        【解决方案7】:

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

        r"""what"ever"""
        

        【讨论】:

          猜你喜欢
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-26
          • 2020-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多