在python字符串中同时使用单引号和双引号

时间:2011-09-20 14:46:30

标签: python

您好我正在尝试在python中包含单引号和双引号的字符串 - ('“)。我需要此表达式的原因是用作某些外部批处理命令的输入。但是,python总是自动将其更正为(\'“)。我想知道是否有办法将双引号和单引号放在一起。谢谢。

9 个答案:

答案 0 :(得分:28)

使用三重引号。

"""Trip'le qu"oted"""

'''Ag'ain qu"oted'''

请记住,仅仅因为Python repr是一个带反斜杠的字符串,并不意味着它实际上是在字符串中添加了任何斜杠,它可能只是显示转义的特殊字符。

使用Python教程中的示例:

>>> len('"Isn\'t," she said.')
18
>>> len('''"Isn't," she said.''')
18

即使第二个字符串出现一个较短的字符,因为它没有反斜杠,但它实际上是相同的长度 - 反斜杠只是为了逃避单引号字符串中的单引号。

另一个例子:

>>> for c in '''"Isn't," she said.''':
...     sys.stdout.write(c)
... 
"Isn't," she said.
>>> 

如果你不让Python格式化字符串,你可以看到字符串没有被改变,只是Python试图明确地显示它。

请参阅tutorial section on strings

答案 1 :(得分:4)

使用三引号字符串:

""" This 'string' contains "both" types of quote """
''' So ' does " this '''

答案 2 :(得分:3)

实际问题是,print()语句不会打印\但是当您在解释器中引用字符串的值时,只要使用撇号,它就会显示“\”。例如,请参阅以下代码:

    >>> s = "She said, \"Give me Susan's hat\""
    >>> print(s)
    She said, "Give me Susan's hat"
    >>> s
    'She said, "Give me Susan\'s hat"'

这与您是否使用单引号,双引号或三引号括起字符串无关。

    >>> s = """She said, "Give me Susan's hat" """
    >>> s
    'She said, "Give me Susan\'s hat" '

包含此内容的另一种方法:

    >>> s = '''She said, "Give me Susan's hat" '''
    >>> s
    'She said, "Give me Susan\'s hat" '
    >>> s =  '''She said, "Give me Susan\'s hat" '''
    >>> s
    'She said, "Give me Susan\'s hat" '

所以基本上,当你引用s的值时,python不会删除\,但是当你尝试打印时删除它。尽管如此,当你提到s的长度时,它并不算“\”。 例如,

    >>> s = '''"''"'''
    >>> s
    '"\'\'"'
    >>> print(s)
    "''"
    >>> len(s)
    4

答案 3 :(得分:3)

要在python上添加单引号和双引号,请使用屏蔽(转义)引号。 试试这个例子:

print(" just display ' and \" ")

\"告诉python这不是引用字符串的结尾。

答案 4 :(得分:1)

这也让我困惑了一天多,但我现在已经消化了。

首先,让我们明白,如果字符串通过 DOUBLE 测试,将输出双引号:

  1. 包含单引号
  2. 不包含双引号

这是最容易记住的方式。

文字 "doesn't" 由于撇号而通过了第一个测试,它算作单引号。然后,我们重新检查它,发现它的外壳内不包含任何双引号。因此,字符串文字输出为双引号:

>>> "doesn't"
"doesn't"

没有必要在输出中用反斜杠转义单引号,因为外壳是由双引号组成的!

现在考虑文字 '"Isn\'t," they said.' 这个文字通过了第一个测试,因为它包含一个撇号,即使它被转义了。但是,它也包含双引号,因此它无法通过第二个测试。因此,它输出为单引号:

>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'

并且由于外壳由单引号组成,因此在输出中需要转义。

如果不是输出中的反斜杠,扫描文字时就会到达 EOL(行尾)。

最后,考虑"\"Isn't,\" they said."

文字中有一个单引号,所以它确实通过了第一个测试……但第二个测试失败了。输出应将字符串文字括在单引号中:

>>> "\"Isn't,\" they said."
'"Isn\'t," they said.'

因此,需要进行逃逸以防止过早的 EOL。

答案 5 :(得分:0)

虽然它更冗长, 另一种方法是做以下事情:

str1 ='其中包含双“s”的部分

str1 = str1 +“其中包含单个's'的部分”

答案 6 :(得分:0)

您可以(1)将字符串括在双引号中并使用\转义双引号或(2)将字符串括在单引号中,并使用\转义单引号。例如:

>>> print('She is 5\' 6" tall.')
She is 5' 6" tall.
>>> print("He is 5' 11\" tall.")
He is 5' 11" tall.

答案 7 :(得分:0)

在f字符串中,不能使用反斜杠。 那时,使用chr()可能是解决方案!

tbody

Unicode HOWTO

答案 8 :(得分:0)

在某些情况下,使用三重引号似乎对我不起作用。

例如,我曾经遇到过将这个脚本操作得更加动态的问题。

listed = drive.ListFile({'q': "title contains '.mat' and '1GN8xQDTW4wC-dDrXRG00w7CymjI' in parents"}).GetList()

'q':之后的部分,有一个双引号和单引号的字符串。所以,我打算独立更改文件类型('.mat)和文件夹 ID('1GN...')。

处理这个问题,我用.format来操作上面的脚本,变成这个

listed = drive.ListFile({'q': "title contains '{}' and '{}' in parents".format(file_type, folder_id)}).GetList()

如果您无法使用三重引号,请提供一些线索。

干杯!