Python Как я могу раздеть первые и последние двойные кавычки - PullRequest
91 голосов
/ 21 июня 2010

Я хочу убрать двойные кавычки из

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

стать

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

Я пытался использовать rstrip, lstrip и strip('[^\"]|[\"$]'), но это не сработало.

Как я могу это сделать? Спасибо за помощь.

Ответы [ 12 ]

170 голосов
/ 21 июня 2010

Если цитаты, которые вы хотите удалить, всегда будут «первыми и последними», как вы сказали, тогда вы можете просто использовать:

string = string[1:-1]

85 голосов
/ 21 июня 2010

Если вы не можете предположить, что все строки, которые вы обрабатываете, имеют двойные кавычки, вы можете использовать что-то вроде этого:

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

Edit:

Я уверен, что вы просто использовали string в качестве имени переменной для примера здесь, и в вашем реальном коде у него есть полезное имя, но я вынужден предупредить вас, что есть модуль с именем string в стандартных библиотеках. Он не загружается автоматически, но если вы когда-либо используете import string, убедитесь, что ваша переменная не затмевает его.

41 голосов
/ 21 июня 2010

Удалить первый и последний символы, и в каждом случае делать удаление, только если рассматриваемый символ является двойной кавычкой:

import re

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

Обратите внимание, что шаблон RE отличается от того, который вы дали, и операция: sub ("заменитель") с пустой строкой замены (strip - это строковый метод, но он выполняет кое-что, отличное от ваших требований , как указали другие ответы).

39 голосов
/ 14 декабря 2013

ВАЖНО: Я расширяю вопрос / ответ, чтобы убрать одинарные или двойные кавычки. И я интерпретирую этот вопрос, чтобы обозначить, что ОБА цитаты должны присутствовать и соответствовать, чтобы выполнить полосу. В противном случае строка возвращается без изменений.

Чтобы "удалить из кавычек" строковое представление, которое может иметь одинарные или двойные кавычки (это расширение ответа @ 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.)

10 голосов
/ 21 июня 2010

Если строка всегда так, как вы показываете:

string[1:-1]
9 голосов
/ 21 июня 2010

Почти готово. Цитата из http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip

Аргумент chars является строкой указание набора символов для удален.

[...]

Аргумент chars не является префиксом или суффикс; скорее, все комбинации его значения отбрасываются:

Таким образом, аргумент не является регулярным выражением.

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

Обратите внимание, что это не совсем то, что вы просили, потому что он съедает несколько кавычек с обоих концов строки!

4 голосов
/ 21 июня 2010

Если вы уверены, что есть «в начале и в конце», которое вы хотите удалить, просто сделайте:

2 голосов
/ 17 мая 2018

Удаление определенной строки из начала и конца строки.

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

> 'Hello World'
1 голос
/ 26 августа 2016

У меня есть какой-то код, который нужно убрать в одинарные или двойные кавычки, и я просто не могу его аст.литерировать.

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

Это похоже на ответ ToolmakerSteve, но допускает строки 0 длины и не превращает один символ " в пустую строку.

0 голосов
/ 03 марта 2018

Функция ниже удалит пустые spces и вернет строки без кавычек. Если кавычек нет, будет возвращена та же самая строка (зачищенная)

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
...