我想从以下内容中去除双引号:
string = '"" " " ""\\1" " "" ""'
获得:
string = '" " " ""\\1" " "" "'
我尝试使用 rstrip
,lstrip
和 strip('[^\"]|[\"$]')
,但它没有起作用。我该怎么做?
string = string[1:-1]
如果您无法假设您处理的所有字符串都具有双引号,则可以使用类似于此的内容:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
编辑:
我确信你在这里只是举例使用了string
作为变量名,并且在你的真实代码中它有一个有用的名称,但我感到有义务提醒你标准库中有一个名为string
的模块。它不会被自动加载,但如果你以后使用import string
,请确保你的变量不会与之冲突。
重要提示:我正在扩展问题/答案以去除单引号或双引号。我将解释该问题的意思是必须同时存在且匹配两个引号才能执行去除操作。否则,字符串将保持不变。
为了“去除引号”一个可能包含单引号或双引号的字符串表示(这是@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,
or there are less than 2 characters, return the string unchanged.
"""
if (len(s) >= 2 and 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
或类似的条件。 - BrennanR要删除字符串的首尾字符,但仅在该字符为双引号时执行删除:
import re
s = re.sub(r'^"|"$', '', s)
请注意,正则表达式模式与您提供的不同,并且操作是使用空替换字符串的“sub”(“替换”)操作(“strip”是一个字符串方法,但与您的要求非常不同,正如其他答案所指出的那样)。startsWith
的解决方案。 - pihentagy如果字符串总是像你展示的那样:
string[1:-1]
快完成了。引用自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" " "" "'
s = '""Hello World""'
s.strip('""')
> 'Hello World'
如果您确定字符串开头和结尾处都有引号需要移除,只需执行以下操作:
string = string[1:len(string)-1]
string = string[1:-1]
string = '"" " " ""\\1" " "" ""'
string.strip('" ') # output '\\1'
strip
的方法,请注意:a)该方法不接受正则表达式作为其参数;b)您提供的正则表达式本来也不会起作用;c)该方法删除所有相邻字符,而不仅仅是一个,因此您将失去两个双引号,即使使用.strip('"')
。 - Tim Pietzcker