如何删除第一个和最后一个双引号

时间:2010-06-21 14:13:44

标签: python string strip

我想从

中删除双引号
string = '"" " " ""\\1" " "" ""'

成为

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

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

我该怎么做? 谢谢你的帮助。

13 个答案:

答案 0 :(得分:167)

如果你想要剥离的报价总是像你说的那样“先行和最后”,那么你可以简单地使用:

string = string[1:-1]

答案 1 :(得分:85)

如果您不能假设您处理的所有字符串都有双引号,您可以使用以下内容:

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

修改

我确信您刚刚使用string作为变量名称来举例说明,在您的实际代码中它有一个有用的名称,但我觉得有必要警告您有一个名为{{3的模块在标准库中。它没有自动加载,但是如果您使用import string,请确保您的变量不会遮挡它。

答案 2 :(得分:41)

删除第一个和最后一个字符,并且在每种情况下仅在相关字符是双引号时才执行删除:

import re

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

请注意,RE模式与您给出的模式不同,操作为sub(“替换”),空替换字符串(strip是一个字符串方法,但做了一些漂亮的事情与您的要求不同,正如其他答案所示)。

答案 3 :(得分:39)

重要提示:我正在扩展问题/答案,以删除单引号或双引号。我解释这个问题意味着BOTH引号必须存在并匹配才能执行条带。否则,字符串将保持不变。

要“取消引用”一个字符串表示形式,它可能有单引号或双引号(这是@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可以采用元组,以匹配任何一种替代方案。 DOUBLED括号(())的原因是我们将一个参数("'", '"')传递给startswith(),以指定允许的前缀,而不是两个参数{{1} }和"'",它将被解释为前缀和(无效)起始位置。

'"'是字符串中的最后一个字符。

测试:

s[-1]

=>

print( dequote("\"he\"l'lo\"") )
print( dequote("'he\"l'lo'") )
print( dequote("he\"l'lo") )
print( dequote("'he\"l'lo\"") )

(对我来说,正则表达式是非常明显的,所以我没有尝试扩展@Alex的答案。)

答案 4 :(得分:10)

如果字符串始终如您所示:

string[1:-1]

答案 5 :(得分:9)

几乎完成了。引自http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip

  

chars参数是一个字符串   指定要设置的字符集   除去。

[...]

  

chars参数不是前缀或   后缀;相反,所有的组合   它的值被剥离了:

所以论证不是正则表达式。

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

请注意,这并不是您所要求的,因为它会从字符串的两端使用多个引号!

答案 6 :(得分:4)

如果你确定“在开头和结尾都有你要删除的内容,请执行以下操作:

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

string = string[1:-1]

答案 7 :(得分:2)

从字符串的开头和结尾删除一个确定的字符串。

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

> 'Hello World'

答案 8 :(得分:1)

我有一些代码需要删除单引号或双引号,我不能简单地使用ast.literal_eval它。

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

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

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

在你的例子中你可以使用strip但你必须提供空间

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

注意\'在输出中是字符串输出的标准python引号

您的变量的值是' \\ 1'

答案 11 :(得分:0)

Python 3.9开始,您可以使用removeprefixremovesuffix

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

答案 12 :(得分:-1)

下面的函数将剥离空的spces并返回没有引号的字符串。如果没有引号,那么它将返回相同的字符串(剥离)

yield Request(url=urljoin(response.url, str(s)), \
                  callback=self.parse, meta={"item": item}, priority=-1)