Ответ 1
Если кавычки, которые вы хотите удалить, всегда будут "первыми и последними", как вы сказали, тогда вы можете просто использовать:
string = string[1:-1]
Я хочу удалить двойные кавычки из
string = '"" " " ""\\1" " "" ""'
чтобы стать
string = '" " " ""\\1" " "" "'
Я попытался использовать rstrip
, lstrip
и strip('[^\"]|[\"$]')
, но это не сработало.
Как я могу это сделать? Спасибо, что помогли мне.
Если кавычки, которые вы хотите удалить, всегда будут "первыми и последними", как вы сказали, тогда вы можете просто использовать:
string = string[1:-1]
Если вы не можете предположить, что все строки, которые вы обрабатываете, имеют двойные кавычки, вы можете использовать что-то вроде этого:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
Edit:
Я уверен, что вы просто использовали string
как имя переменной для примера здесь, а в вашем реальном коде оно имеет полезное имя, но я чувствую себя обязанным предупредить вас, что есть модуль с именем string
в стандартных библиотеках. Он не загружается автоматически, но если вы когда-либо используете import string
, убедитесь, что ваша переменная не затмевает его.
Чтобы удалить первый и последний символы и в каждом случае сделать удаление, только если рассматриваемый символ является двойной цитатой:
import re
s = re.sub(r'^"|"$', '', s)
Обратите внимание, что шаблон RE отличается от того, который вы указали, и операция sub
( "substitute" ) с пустой заменой (strip
является строковым методом, но делает что-то очень отличное от ваших требований, как указывали другие ответы).
ВАЖНО:. Я расширяю вопрос/ответ, чтобы разделить одиночные или двойные кавычки. И я интерпретирую этот вопрос как означающий, что 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()
, чтобы указать допустимые префиксы, а не TWO-параметры "'"
и '"'
, которые будут интерпретироваться в качестве префикса и (недопустимой) стартовой позиции.
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.)
Если строка всегда отображается так:
string[1:-1]
Почти сделано. Цитата из http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip
Аргумент chars - это строка с указанием набора символов удалены.
[...]
Аргумент chars не является префиксом или суффикс; скорее, все комбинации его значения удаляются:
Таким образом, аргумент не является регулярным выражением.
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
Обратите внимание, что это не совсем то, что вы запросили, потому что он ест несколько кавычек с обоих концов строки.
Если вы уверены, что есть "в начале и в конце, которые вы хотите удалить, просто выполните:
string = string[1:len(string)-1]
или
string = string[1:-1]
Удалить определенную строку из начала и конца строки.
s = '""Hello World""'
s.strip('""')
> 'Hello World'
У меня есть код, которому нужно снять одиночные или двойные кавычки, и я не могу просто ast.literal_eval его.
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
Это похоже на ответ ToolmakerSteve, но он позволяет 0 строк длины и не превращает одиночный символ "
в пустую строку.
найдите позицию первого и последнего "в вашей строке
>>> s = '"" " " ""\\1" " "" ""'
>>> l = s.find('"')
>>> r = s.rfind('"')
>>> s[l+1:r]
'" " " ""\\1" " "" "'
в вашем примере вы можете использовать полосу, но вам нужно предоставить пространство
string = '"" " " ""\\1" " "" ""'
string.strip('" ') # output '\\1'
Обратите внимание, что\'на выходе - стандартные кавычки python для вывода строки
значение вашей переменной равно '\\ 1'
Функция ниже удалит пустые 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