Answers:
如果您不能假设您处理的所有字符串都带有双引号,则可以使用如下所示的内容:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
编辑:
我确定您只是string
在此处用作示例的变量名,并且在您的真实代码中它具有有用的名称,但是我不得不警告您string
在标准库中有一个名为模块的模块。它不会自动加载,但是如果您曾经使用过,请import string
确保您的变量不会使其黯然失色。
要删除第一个和最后一个字符,并且仅在所讨论的字符为双引号的情况下,才分别删除:
import re
s = re.sub(r'^"|"$', '', s)
请注意,RE模式与您给定的RE模式不同,并且操作sub
(用空格替换字符串)(“替代”)(strip
是字符串方法,但与您的要求有所不同,如其他答案所示)。
startsWith
。
重要说明:我正在扩展问题/答案以去除单引号或双引号。我将问题解释为必须同时存在两个引号,并且两个引号都必须匹配才能执行删除操作。否则,字符串将保持不变。
要“取消引用”字符串表示形式,该字符串表示形式周围可能带有单引号或双引号(这是@tgray答案的扩展):
def dequote(s):
"""
If a string has single or double quotes around it, remove them.
Make sure the pair of quotes match.
If a matching pair of quotes is not found, return the string unchanged.
"""
if (s[0] == s[-1]) and s.startswith(("'", '"')):
return s[1:-1]
return s
说明:
startswith
可以取一个元组,以匹配多个备选方案中的任何一个。的原因倍增括号((
和))
是使得我们通过一个参数("'", '"')
来startswith()
,以指定允许的前缀,而不是两个参数"'"
和'"'
,这将被解释为一个前缀和(无效的)的开始位置。
s[-1]
是字符串中的最后一个字符。
测试:
print( dequote("\"he\"l'lo\"") )
print( dequote("'he\"l'lo'") )
print( dequote("he\"l'lo") )
print( dequote("'he\"l'lo\"") )
=>
he"l'lo
he"l'lo
he"l'lo
'he"l'lo"
(对我来说,正则表达式不是显而易见的,所以我没有尝试扩展@Alex的答案。)
len(s) >= 2
或类似的东西。
快完成了 引用http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip
chars参数是一个字符串,指定要删除的字符集。
[...]
chars参数不是前缀或后缀;而是删除其值的所有组合:
因此,该参数不是正则表达式。
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
注意,这并不是您所要求的,因为它在字符串的两端都使用了多个引号!
从开始Python 3.9
,您可以使用removeprefix
和removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
,请注意:a)此方法不使用正则表达式作为参数,b)您提供的正则表达式仍然无法正常工作,并且c)此方法会剥离所有相邻字符,而不仅仅是一个字符,因此您可能会丢失两个双引号.strip('"')
。