Регулярное выражение: удалить между скобками, но только если длина меньше символа - PullRequest
1 голос
/ 17 июня 2020

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

this is a text ( with parts in brackets ) . This is another string ( with a very long string between brackets that should not be removed because it is too long being over 100 characters )

Желаемый результат:

this is a text  . This is another string ( with a very long string between brackets that should not be removed because it is too long being over 100 characters )

Я могу сопоставить содержимое скобок с (с целью заменить его пустой строкой для удаления it).

\s\(.+\)\s

Теперь, если нет закрывающей скобки, регулярное выражение удаляет большую часть текста. Я хотел бы удалить содержимое между двумя скобками, но только если длина <100 символов. Как мне это сделать с помощью регулярного выражения? Я так понимаю, мне понадобится выражение опережающего просмотра? Я ценю помощь! </p>

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

\s\(.+\){1,100}\s

1 Ответ

1 голос
/ 18 июня 2020

Используйте

\s\([^()]{0,100}\)\s

См. proof . Установите ограничивающий квантификатор после шаблона [^()], он соответствует любому символу, кроме скобок.

Пример кода:

import re

test_str = "this is a text ( with parts in brackets ) . This is another string ( with a very long string between brackets that should not be removed because it is too long being over 100 characters )"

print( re.sub(r"\s\([^()]{0,100}\)\s", "", test_str) )

Вывод:

this is a text. This is another string ( with a very long string between brackets that should not be removed because it is too long being over 100 characters )
...