#python #regex
#python #регулярное выражение
Вопрос:
Я хочу удалить что-то вроде (Q.5)
или (5.)
или (Question5)
. У меня есть шаблон регулярных выражений для этого, но дело в том, что он также удаляет вещи за скобками.
Я использовал ((S ))|((s|n)Ss*.s*)
, но он преобразует
(d) Q 2.3 5.6 hello. J.E.E (Q.4) (Q4) (Q4.)
Для
Q 3 6 hello. E.E
но результат, который я ожидаю, будет
Q 2.3 5.6 hello. J.E.E
Ответ №1:
Предполагая, что вы (...)
сбалансированы и не экранированы, вы можете использовать это регулярное выражение с отрицаемым классом символов для поиска:
s*([^)s]*)s*
и замените пустой строкой.
Код:
>>> import re
>>> s = '(d) Q 2.3 5.6 hello. J.E.E (Q.4) (Q4) (Q4.)'
>>> print (re.sub(r's*([^)s]*)s*', '', s))
Q 2.3 5.6 hello. J.E.E
Демонстрация регулярных выражений
Подробности регулярного выражения:
s*
: Сопоставьте 0 или более пробелов(
: Открытие соответствия(
[^)s]*
: Отрицаемый класс символов для соответствия 0 или более любому символу, который не)
является и не является пробелом)
: Закрытие соответствия)
s*
: Сопоставьте 0 или более пробелов