python: использование регулярного выражения для отрезания ограничительных скобок/кавычек

У меня есть строка вида:

[ограничительный символ]текст[ограничительный символ]

например

(какой-то текст)
"ещё какой-то текст   "

Необходимо создать регулярное выражение, которое:

  1. отрезает ограничительные символы, причём только парные, т.е. вариант "текст) трогаться не будет
  2. у оставшегося текста отрезаются пробелы и табуляции по концам

Написал такую регулярку:

\([ \t]*(.*)[ \t]*\)|\"[ \t]*(.*)[ \t]*\"|\'[ \t]*(.*)[ \t]*\'$

на сайте для тестов регулярок (https://regex101.com/) всё работает замечательно, но в питоне код:

re.sub(r"^\([ \t]*(.*)[ \t]*\)|\"[ \t]*(.*)[ \t]*\"|\\'[ \t]*(.*)[ \t]*\\'$", r"\1", text)

не работает

Подскажите в чем ошибка и как ее исправить о парности символов

P.S.

  1. кстати исходное регулярное выражение почему-то не отрезает пробелы в конце строки - как это можно исправить?

  2. можно ли как-то сократить размер регулярки при сохранении условия


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

Автор решения: ipatev_nn

Так как ответы на основной вопрос были даны в комментарии, то предложу немного другой вариант регулярного выражения:

regex = r"^(?:(\()|([\"']))[ \t]*(.*?)[ \t]*(?(2)\2|\))$"

Преимущество данного выражения в том, что данные всегда будут находиться в третьей \3 группе захвата.

Пример: https://regex101.com


О логике:
(?:(\()|([\"'])) - используем незахватываемую группу, для поиска ограничивающего символа с логическим или - или открывающуюся скобку ( или одна из кавычек одинарная и двойная "'
[ \t]* - ноль и более табуляций и знаков пробела
(.*?) - группа в которую попадут под захват нужные данные (3я группа)
[ \t]* - ноль и более табуляций и знаков пробела
(?(2)\2|\)) - проверка, если вторая группа была захвачено, значит первым символом в строке была захвачена кавычка (одинарная или двойная), если это так, то ищем до аналогичного символа, иначе закрывающаяся скобка )

→ Ссылка