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


88

考虑:

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

那么我们如何获得报价,而不是斜杠?

并且请不要建议r'what"ever',因为那样的话,问题就变成了我们如何包括两种引号?

有关


在刺激性的原始字符串用例(正则表达式和其他情况下,Python解释反斜杠的情况)中,反斜杠很好,因为反斜杠将由正则表达式引擎/任何引擎处理。这并不适用于您可能要使用原始字符串的所有情况,但是在尝试删除反斜杠之前,请务必考虑一下它是否适用于您的用例。
user2357112支持Monica

Answers:


146

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

r'what"ever'

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

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

如果要在字符串中同时包含两种用三引号引起来的字符串(一种极不可能的情况),则不能这样做,并且必须使用带有转义符的非原始字符串。


1
优秀。花了我一秒钟的时间才意识到我也可以将三引号字符串做成原始的。
mpen 2011年

3
我也喜欢最后一段……这正是我要弄清楚的。不同报价方式的局限性。我正在比较Pythonr"raw string"和C#,@"@-quoted string"以及"""triple quotes"""
mpen

2
Python newb有点困惑,不是r'what"ever"解析错误吗?你是说r'what"ever'
nmr 2014年

1
Python开发人员怎么了?他们为什么不像其他所有语言一样简单地实施逃生系统?
Jamby

6
@Jamby他们确实有一个转义系统,您只需将其与非原始字符串(在它们前面没有r的字符串)一起使用,它的工作原理几乎与其他每种语言一样
科本

10

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

'''what"ever'''

您错过了问题的原始部分。
mpen 2011年

10

如果您需要任何类型的引号(两者都使用单引号,双引号和三引号),则可以“组合”(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解析器连接了字符串,并且不会创建多个字符串。如果添加“ +”运算符,则会创建并组合多个字符串。


5

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

r"""what"ever"""

3

由于我偶然发现了这个答案,并且对我有很大帮助,但是我发现了一个较小的语法问题,因此我认为我应该避免其他人的挫败感。如前所述,用三引号引起来的字符串适用于这种情况,但是请注意,如果您希望字符串中的“出现在字符串本身的末尾:

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

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

在这种特殊情况下,您将需要使用以下任一方法:

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

或使用上述方法构建多个混合了“和”的字符串,然后在事实之后将它们串联起来。


1

仅包括新的Python f String兼容功能:

var_a = 10

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

F弦虽然支持转义,不是吗?这样就可以了f"foo\"bar"
mpen19年

-3

使用:

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 + '/'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.