Я думаю, цього має бути достатньо:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... припускаючи, що ваш текст (HTML) міститься в змінній, що називається "текст".
Це також передбачає, що немає інших тегів HTML, які можна легально вставити всередину тегу HTML TITLE, і жодного способу легально вбудовувати будь-який інший <символ у такий контейнер / блок.
Однак ...
Не використовуйте регулярні вирази для розбору HTML в Python. Використовуйте HTML-аналізатор! (Якщо ви не збираєтеся написати повний аналізатор, що буде додатковою роботою, коли різні парсери HTML, SGML та XML вже є у стандартних бібліотеках.
Якщо ви обробляєте HTML- суп з тегом "реального світу" (який часто не відповідає будь-якому валідатору SGML / XML), тоді використовуйте пакет BeautifulSoup . Він ще не є у стандартних бібліотеках (поки що), але широко рекомендується для цієї мети.
Ще один варіант: lxml ..., який написаний для правильно структурованого (відповідно до стандартів) HTML. Але він має можливість відмовитися від використання BeautifulSoup як аналізатора: ElementSoup .