ВАЖНО: Я расширяю вопрос / ответ, чтобы убрать одинарные или двойные кавычки. И я интерпретирую этот вопрос, чтобы обозначить, что ОБА цитаты должны присутствовать и соответствовать, чтобы выполнить полосу. В противном случае строка возвращается без изменений.
Чтобы "удалить из кавычек" строковое представление, которое может иметь одинарные или двойные кавычки (это расширение ответа @ 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.)