Я хочу удалить двойные кавычки из:
string = '"" " " ""\\1" " "" ""'
чтобы получить:
string = '" " " ""\\1" " "" "'
Я пытался использовать rstrip
, lstrip
и , strip('[^\"]|[\"$]')
но это не работа.
Как я могу это сделать?
Ответы:
Если вы не можете предположить, что все строки, которые вы обрабатываете, имеют двойные кавычки, вы можете использовать что-то вроде этого:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
Редактировать:
Я уверен, что вы просто использовали string
имя переменной для примера здесь, и в вашем реальном коде у него есть полезное имя, но я чувствую себя обязанным предупредить вас, что string
в стандартных библиотеках есть модуль, названный . Он не загружается автоматически, но если вы когда-нибудь используете его, import string
убедитесь, что ваша переменная не затмевает его.
Чтобы удалить первый и последний символы и в каждом случае удалять только в том случае, если рассматриваемый символ является двойной кавычкой:
import re
s = re.sub(r'^"|"$', '', s)
Обратите внимание, что шаблон 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" " "" '
>>>
Обратите внимание, что это не совсем то, что вы просили, потому что он использует несколько кавычек с обоих концов строки!
У меня есть код, в котором нужно убрать одинарные или двойные кавычки, и я не могу просто ast.literal_eval.
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
Это похоже на ответ ToolmakerSteve, но он допускает строки 0 длины и не превращает отдельный символ "
в пустую строку.
Начиная с Python 3.9
, вы можете использовать removeprefix
и removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
, обратите внимание, что а) этот метод не принимает регулярное выражение в качестве аргумента, б) предоставленное вами регулярное выражение все равно не сработало бы и в) этот метод удаляет все соседние символы, а не только один, поэтому вы бы потеряли две двойные кавычки с.strip('"')
.