использование регулярных выражений для фильтрации скобок с исключениями - PullRequest
0 голосов
/ 26 сентября 2018

Я использую Python re и хочу отфильтровать текст и удалить все круглые скобки, кроме тех, которые соответствуют (.), я написал это регулярное выражение '((?!\(\.\))[()])', используя отрицательный взгляд вперед, но он все еще захватывает закрывающую скобку ")" для(.)

Любые идеи, как я могу это исправить, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Этот шаблон работал для меня: \((?!\.\))|(?<!\(\.)\) (пример здесь: https://regex101.com/r/jK5wU3/5). Это выбирает:

  1. все "(" не сопровождается ".)" И
  2. all ")" не предшествует "(."

ПРИМЕЧАНИЕ. Мне кажется, вы не имели в виду буквальную строку "(.)", А скорее имели в виду "весь контент внутри"сбалансированные скобки ". В этом случае регулярное выражение, скорее всего, не является подходящим инструментом для работы.

0 голосов
/ 26 сентября 2018

Регулярное выражение получает), выполняет предпросмотр, который завершается неудачей, и съедает скобку.

Попробуйте, я чувствую, что это понятнее, если выполнить два шага.

victim = re.sub(r'\( (?=.[^)])',  '', victim, re.X) # Strip (
victim = re.sub(r'(?<=[^(].) \)', '', victim, re.X) # Strip )
...