如何去掉第一个和最后一个双引号?

我想去掉双引号:

string = '"" " " ""\\1" " "" ""'

取得:

string = '" " " ""\\1" " "" "'

我尝试使用 rstriplstripstrip('[^\"]|[\"$]'),但它不工作。

我怎么能这么做?

250581 次浏览

如果你想去掉的引号总是像你说的那样是“第一个和最后一个”,那么你可以简单地使用:

string = string[1:-1]

如果字符串总是如您所示:

string[1:-1]

如果你确定在开头和结尾都有一个“ ,并且你想删除它,那么就这样做:

string = string[1:len(string)-1]

或者

string = string[1:-1]

如果你不能假设你处理的所有字符串都有双引号,你可以这样做:

if string.startswith('"') and string.endswith('"'):
string = string[1:-1]

编辑:

我确信您在这里使用 string作为示例的变量名,并且在您的实际代码中它有一个有用的名称,但是我觉得有必要提醒您,在标准库中有一个名为 string的模块。它不是自动加载的,但是如果您曾经使用过 import string,请确保您的变量不会使它黯然失色。

删除第一个和最后一个字符,在每种情况下,只有当有问题的字符是双引号时才删除:

import re


s = re.sub(r'^"|"$', '', s)

Note that the RE pattern is different than the one you had given, and the operation is sub ("substitute") with an empty replacement string (strip is a string method but does something pretty different from your requirements, as other answers have indicated).

在你的字符串中找到第一个和最后一个的位置

>>> s = '"" " " ""\\1" " "" ""'
>>> l = s.find('"')
>>> r = s.rfind('"')


>>> s[l+1:r]
'" " " ""\\1" " "" "'

Almost done. Quoting from http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip

Char 参数是一个字符串 指定要设置为 被移除了。

[...]

Char 参数不是前缀或 后缀; 更确切地说,是 它的价值被剥离:

所以参数不是 regexp。

>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>

注意,这并不完全是您所要求的,因为它从字符串的两端吃掉了多个引号!

重要提示: 我将问题/答案扩展为去掉单引号或双引号。我将这个问题解释为两个引号都必须存在,并且匹配,才能执行带。否则,字符串将不变地返回。

To "dequote" a string representation, that might have either single or double quotes around it (this is an extension of @tgray's answer):

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

Explanation:

startswith可以采用元组,以匹配多个备选方案中的任何一个。使用双括号 (())的原因是,我们将 ONE 参数 ("'", '"')传递给 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 的回答。)

我有一些需要去掉单引号或双引号的代码,我不能简单地用 ast.Literaleval。

if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]

这与 ToolmakerSteve 的答案类似,但是它允许0长度的字符串,并且不会将单个字符 "变成空字符串。

in your example you could use strip but you have to provide the space

string = '"" " " ""\\1" " "" ""'
string.strip('" ')  # output '\\1'

note the \' in the output is the standard python quotes for string output

变量的值是’1’

下面的函数将去掉空格并返回不带引号的字符串。如果没有引号,那么它将返回相同的字符串(去掉)

def removeQuote(str):
str = str.strip()
if re.search("^[\'\"].*[\'\"]$",str):
str = str[1:-1]
print("Removed Quotes",str)
else:
print("Same String",str)
return str

从字符串的开始和结束中删除确定的字符串。

s = '""Hello World""'
s.strip('""')


> 'Hello World'

Python 3.9开始,你可以使用 removeprefixremovesuffix:

'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'