Python: удаление первого и последнего символов в строке (при некоторых условиях)

стоит задача:

есть строка, если строка заключена в кавычки или в круглые скобки, то удалить их, затем убрать пробельные символы (даже если ничего удалять не требовалось)

код такой:

def mystrip(text):
    return (text[1:-1] if text[0] == text[-1] and text[0] in '\'"' or text[0] == '(' and text[-1] == ')' else text).strip()

Вопрос чисто эстетический - а как можно эту задачу сделать красиво (т.е. понятный, но при этом и короткий код)? Через регулярки?


Ответы (2 шт):

Автор решения: Daniil Loban

Короче можно, но насколько понятнее зависит уже от знания регулярок, в данном случае используется | - как разделитель вариантов для match:

  • ^".*"$ двойные кавычки
  • ^\(.*\)$ скобки (должны быть экранированы)
  • ^'.*'$ одинарные кавычки (тоже экранируем или внешние делаем ''')

код (переносы чтобы избежать скрола):

import re
def mystrip(text):
  return (text[1:-1] if re.match(r'^".*"$|^\(.*\)$|^\'.*\'$', text) else text)
    .strip()
→ Ссылка
Автор решения: Алексей Р

Вариант покороче исходного без regexp:

texts = ['"(12345)"', '( ..... )', '   6789 ', ' "879)', '"     aaaa"']
drop = {'()', '""', '**', '##'}  # итд
for t in texts:
    out = (t[1:-1] if t[0] + t[-1] in drop else t).strip()
    print(out)
(12345)
.....
6789
"879)
aaaa
→ Ссылка