Zwei Fehler in Ihrem Code sein. Zuerst Sie passende nicht (und insbesondere die Erfassung), was Sie denken, dass Sie passendes und erfassen - einfügen nach dem Aufruf .search
:
>>> _.groups()
('',)
Die ungezwungene Wiederholung der Wiederholungen (Stern nach einer Erfassungsgruppe mit nichts als Sterne) passt einmal zu viel zusammen - mit der leeren Saite am Ende dessen, was du denkst, dass du mit ihm übereinstimmst - und das wird gefangen genommen. Fix von mindestens einer der Stars auf ein Plus zu ändern, zum Beispiel durch:
>>> pat_error = re.compile(r">(\s*\w+)*>")
>>> pat_error.search(text)
<_sre.SRE_Match object at 0x83ba0>
>>> _.groups()
(' the',)
nun diese Spiele und fängt vernünftig. Zweitens, Sie verwenden keine rohe String-Literal-Syntax, wo Sie sollten, so dass Sie keinen Backslash haben, wo Sie denken, Sie haben einen - Sie haben eine Escape-Sequenz \1
, die die gleiche wie CHR (1) ist. Fix von roher Stringliteral Syntax, also nach dem oben Schnipsel
>>> pat_error.sub(r">\1", text)
'<hi type="italic"> the</hi>'
Alternativ Sie alle Ihrer Schrägstriche verdoppeln könnten, zu vermeiden, dass sie als Beginn Escape-Sequenzen genommen werden - aber, rohe Stringliteral Syntax viel besser lesbar.
Das ist wirklich keine Frage ist ... –