Согласно ответам, опубликованным Pev и wr, почему бы не обновить регулярное выражение, например ::
pattern = r"(?is)<script[^>]*>(.*?)</script>"
text = """<script>foo bar
baz bar foo </script>"""
re.sub(pattern, '', text)
(? Is) - добавлено, чтобы игнорировать регистр и разрешать новые строки в тексте. Эта версия также должна поддерживать теги сценария с атрибутами.
РЕДАКТИРОВАТЬ: Я пока не могу добавлять комментарии, поэтому я просто редактирую свой ответ. Я полностью согласен с комментарием ниже, регулярные выражения совершенно не подходят для таких задач и б. суп от lxml намного лучше. Но заданный вопрос дал только простой пример, и регулярных выражений должно быть достаточно для такой простой задачи. Использовать Beautiful Soup для простого удаления текста может быть слишком много (перегрузка? Я не могу выразить то, что имею в виду, извините за мой английский).
Кстати, я ошибся, код должен выглядеть так:
pattern = r"(?is)(<script[^>]*>)(.*?)(</script>)"
text = """<script>foo bar
baz bar foo </script>"""
re.sub(pattern, '\1\3', text)