Python 字符串中同时包含单引号和双引号
- 2025-04-10 09:45:00
- admin 原创
- 16
问题描述:
我试图在 Python 中创建一个包含单引号和双引号的字符串('
和"
)。但是,Python 总是自动将其更正为('
,"
)。我想知道是否有办法将双引号和单引号放在一起。
解决方案 1:
使用三重引号。
"""Trip'le qu"oted"""
或者
'''Ag'ain qu"oted'''
请记住,仅仅因为 Python repr
sa 字符串带有反斜杠,并不意味着它实际上在字符串中添加了任何斜杠,它可能只是显示转义的特殊字符。
使用 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 试图明确地显示它。
请参阅有关字符串的教程部分。
解决方案 2:
使用三重引号字符串:
""" This 'string' contains "both" types of quote """
''' So ' does " this '''
解决方案 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" '
因此,基本上,当您引用 的值时,python 不会删除 ,`s`但当您尝试打印时会删除它。尽管如此,当您引用 的长度时`s`,它不会计算
。例如,
>>> s = '''"''"'''
>>> s
'"\'\'"'
>>> print(s)
"''"
>>> len(s)
4
解决方案 4:
要在 python 上添加单引号和双引号,请使用屏蔽(转义)引号。例如,尝试以下操作:
print(" just display ' and \" ")
告诉"
python 这不是引用字符串的结尾。
解决方案 5:
这也困惑了我一天多的时间,不过现在已经消化了。
首先,让我们了解一下,如果字符串通过了 DOUBLE 测试,它将输出 DOUBLE 引号:
包含单引号
不包含双引号
这是最简单的记住方法。
该字面值"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。
解决方案 6:
您可以 (1) 将字符串括在双引号中,并使用 a 对双引号进行转义;或者 (2) 将字符串括在单引号中,并使用 a 对单引号进行转义
。例如:
>>> print('She is 5\' 6" tall.')
She is 5' 6" tall.
>>> print("He is 5' 11\" tall.")
He is 5' 11" tall.
解决方案 7:
在 f 字符串中,我不能使用反斜杠。那时,使用 chr() 可能是解决方案!
print(f"- tokenizer: {' '.join(str(type(tokenizer)).split(chr(39))[1:-1])}")
Unicode 指南
解决方案 8:
尽管它更冗长,但另一种方法是执行以下操作:
str1 = 'the part that has double "s" in it'
str1 = str1 + " the part that has single 's' in it"
解决方案 9:
在某些情况下,使用三重引号似乎对我来说不起作用。
例如,我曾经面临过操纵这个脚本使其更加动态的问题。
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()
如果您无法使用三重引号,它可能会为您提供一些线索。
干杯!
扫码咨询,免费领取项目管理大礼包!