Відповіді:
Якщо ви не можете припустити, що всі оброблювані рядки мають подвійні лапки, ви можете використовувати щось подібне:
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
.
ВАЖЛИВО: Я розширюю питання / відповідь, щоб викреслити окремі або подвійні лапки. І я інтерпретую питання, що означає, що цитати 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
може взяти кортеж, щоб відповідати будь-якій з кількох альтернатив. Причина подвоєною дужки ((
і ))
так , що ми передаємо ОДИН параметра ("'", '"')
для того 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 не є префіксом або суфіксом; швидше, всі комбінації його значень позбавлені:
Отже, аргумент - це не зворотний перелік.
>>> 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 рядків довжини і не перетворює один символ "
у порожній рядок.
Нижче функція зніме порожні відрізки та поверне рядки без лапок. Якщо немає лапок, то він поверне той самий рядок (позбавлений)
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
Починаючи з Python 3.9
, ви можете використовувати removeprefix
та removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
, зауважте, що: a) цей метод не приймає регулярний вираз як його аргумент; ви втратили б дві подвійні лапки.strip('"')
.