Creo que esto debería ser suficiente:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... suponiendo que su texto (HTML) esté en una variable llamada "texto".
Esto también supone que no hay otras etiquetas HTML que se puedan incrustar legalmente dentro de una etiqueta de TÍTULO HTML y no hay forma de incrustar legalmente ningún otro carácter <dentro de dicho contenedor / bloque.
Sin embargo ...
No use expresiones regulares para el análisis HTML en Python. ¡Utiliza un analizador HTML! (A menos que vaya a escribir un analizador completo, lo que sería un trabajo adicional cuando varios analizadores HTML, SGML y XML ya están en las bibliotecas estándar.
Si maneja HTML de sopa de etiqueta del "mundo real" (que con frecuencia no se ajusta a ningún validador SGML / XML), utilice el paquete BeautifulSoup . No está en las bibliotecas estándar (todavía), pero se recomienda ampliamente para este propósito.
Otra opción es: lxml ... que está escrito para HTML correctamente estructurado (conforme a los estándares). Pero tiene una opción para recurrir al uso de BeautifulSoup como analizador: ElementSoup .