Nein zu (1). Setzt man den die greedy RE <em>.*</em> auf den Beispielstring an, wird zwar das äußere Element korrekt erkannt, nicht aber das innere (das den Teil mit “betont” mitnimmt). Die stingy RE <em>.*?</em> hingegen kriegt zwar das inneren Element korrekt hin, nicht aber das äußere, bei dem dann der Teil mit “betont” fehlt.

Nein zu (2). XML und Freunde sind kontextfrei (SGML genau genommen sogar mehr als das), und Parser dafür hacktman nicht mit Regulären Ausdrücken (es sei denn, eine lexikalische Analyse reicht schon, oder man wills gar nicht so genau wissen). Erfreulicherweise hat Python auch schon Parser für SGML (und damit HTML – nicht toll, aber für die meisten Zwecke brauchbar) und XML (sowohl SAX als auch DOM) an Bord. Nutzt sie, wenn ihr Markup-Sprachen parsen müsst.