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))