Попытка получить Python RegExp, чтобы удалить все в скобках [abc] - PullRequest
1 голос
/ 03 ноября 2019

Это регулярное выражение удаляет все между $ $, но не []

r"([$@*[\]()&?]).*?(.)"

Я думаю, что это связано с тем, что [и] не тот же символ, но я не совсем уверенчто не так. Любые идеи о том, как бороться с удалением всего, что находится между этими специальными символами, включая []?

enter image description here

https://regex101.com/r/pK9gX3/96

Спасибо

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Если у вас есть еще один окружающий символ, такой как {}, (), [] .. etc, попробуйте этот код:

import re
# list of surrounding characters to build a large regular expression 
surrounding = [('\$', '\$'), ('\[', '\]'), ('{', '}')]
text = """
$remove$text
[remove]text
"""

RE_PATTERN = '|'.join(r'{0}[^{0}]*?{1}.*?'.format(*s) for s in surrounding)
print(RE_PATTERN)  # \$[^\$]*?\$.*?|\[[^\[]*?\].*?|{[^{]*?}.*?
print(re.sub(RE_PATTERN,'', text))
# text
# text
1 голос
/ 03 ноября 2019

Ваше регулярное выражение не работает, потому что во втором случае \1 пытается соответствовать [. Один из способов обойти это - вызвать каждую опцию отдельно:

(\$[^$]*\$|\[[^]]*\])(.*)

Демонстрация regex101

Обратите внимание, что если вы сделаете так, вы можете сделать первую группу неперехватите и замените замену на \1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...