import re
def remove_text_between_brackets(text):
n = 1
while n:
text, n = re.subn(r'\s*\[[^][]*]', '', text) # remove non-nested/flat balanced parts
return text.strip()
texts = ['Это отличная строка [по моему мнению]', '[Сейчас бы погладить [милого] ёжика] Это прекрасная [ну или не очень] строка']
for text in texts:
print(remove_text_between_brackets(text))
aW1wb3J0IHJlCgpkZWYgcmVtb3ZlX3RleHRfYmV0d2Vlbl9icmFja2V0cyh0ZXh0KToKICAgIG4gPSAxCiAgICB3aGlsZSBuOgogICAgICAgIHRleHQsIG4gPSByZS5zdWJuKHInXHMqXFtbXl1bXSpdJywgJycsIHRleHQpICAjIHJlbW92ZSBub24tbmVzdGVkL2ZsYXQgYmFsYW5jZWQgcGFydHMKICAgIHJldHVybiB0ZXh0LnN0cmlwKCkKCnRleHRzID0gWyfQrdGC0L4g0L7RgtC70LjRh9C90LDRjyDRgdGC0YDQvtC60LAgW9C/0L4g0LzQvtC10LzRgyDQvNC90LXQvdC40Y5dJywgJ1vQodC10LnRh9Cw0YEg0LHRiyDQv9C+0LPQu9Cw0LTQuNGC0YwgW9C80LjQu9C+0LPQvl0g0ZHQttC40LrQsF0g0K3RgtC+INC/0YDQtdC60YDQsNGB0L3QsNGPIFvQvdGDINC40LvQuCDQvdC1INC+0YfQtdC90YxdINGB0YLRgNC+0LrQsCddCmZvciB0ZXh0IGluIHRleHRzOgogICAgcHJpbnQocmVtb3ZlX3RleHRfYmV0d2Vlbl9icmFja2V0cyh0ZXh0KSk=