Poiché l'HTML è stato assemblato da fonti eterogenee, è probabile che non ti interessino gli script che potrebbe contenere. Quindi il tuo approccio mi sembra praticabile.
Credo che l'approccio più pratico e gestibile sarebbe quello di creare un elenco di tag e attributi HTML consentiti (è probabile che tu non voglia, più che semplicemente bisogno , Codice CSS; quindi gli attributi id
, style
e class
possono essere scartati del tutto). Tag come IFRAME
e attributi come onfocus
molto probabilmente non saranno inclusi nell'elenco.
Una volta ottenuto questo, è possibile eseguire il codice HTML tramite un parser che eliminerà eventuali tag e attributi sconosciuti. Puoi farlo in due fasi, un pulitore "tagoup" (HTML Tidy o TagSoup o HTMLClean o BeautifulSoup - proverei prima HTML Tidy) e un parser HTML completo.
In questo modo ti ritroverai con un codice HTML ben formato e con una cornice che può essere manipolato molto meglio e in maggiore sicurezza.
Eviterei di associare regexp a meno che non abbia davvero avuto altra alternativa.