Python — очистка регулярных выражений для любых скобок

Мой код должен очищать пробелы вокруг скобок любого типа, поэтому я предполагаю, что использование регулярных выражений — мой лучший способ действий. Мои строки (я думаю) всегда будут выглядеть следующим образом (хотя всегда приветствуется большая надежность):

text = "the people ( that don't still like / love you } are going to ..."

выглядеть как:

final = "the people (that don't still like / love you} are going to ..."

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

final = re.sub( r'\s[\(]+\s(\w*)\s[\)]+\s' , '\s[\(]+\1[\)]+\s' , text )

Пожалуйста, спасибо.

Вы не сопоставляете пробелы и }

The fourth bird 20.12.2020 15:20

Может re.sub(r'(?<=[{[(])\s+|\s+(?=[]})])', '', text)? См. regex101.com/r/iQl5Oo/1

Wiktor Stribiżew 20.12.2020 15:20

Если это должно быть от типа открывающей скобки к типу закрывающей скобки ([{[(])\s*(.*?)\s*([]})])regex101.com/r/7i3VNM/1

The fourth bird 20.12.2020 15:28

Используется аналогично @WiktorStribiżew, но с использованием группы захвата re.sub(r'([({[])\s+|\s+([)}]])', r'\g<1>\g<2>', text)

PaxPrz 20.12.2020 15:43

Ответы намного быстрее, чем я ожидал, спасибо всем

giladgh 20.12.2020 15:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В строке вашего примера вы хотите удалить пробелы после открытия и перед закрывающей скобкой для разных типов скобок.

Шаблон, который вы пробовали, не работает, так как между ( и ) есть несколько слов, и вы не соответствуете }

Обратите внимание, что в классе символов вам не нужно экранировать скобки.

([{[(])\s*(.*?)\s*([]})])

Объяснение

  • ([{[(]) Группа захвата 1 соответствует любой из перечисленных скобок.
  • \s* Совпадение 0+ пробельных символов
  • (.*?) Захватите группу 2, сопоставьте любой символ, как можно меньше
  • \s* Совпадение 0+ пробельных символов
  • ([]})]) Группа захвата 3 соответствует любой из перечисленных скобок.

Посмотрите демонстрацию регулярных выражений

Замените на 3 группы захвата.

\1\2\3

Я принял это за лучшее объяснение. Спасибо.

giladgh 20.12.2020 16:00

Другие вопросы по теме