擅长:python、mysql、java
<p>你的代码中有两个错误。首先,您没有匹配(特别是捕获)您认为匹配和捕获的内容——在调用<code>.search</code>之后插入:</p>
<pre><code>>>> _.groups()
('',)
</code></pre>
<p>重复的无限制的重复(在一个除了星星什么都没有的捕捉组之后的星星)匹配了太多——在你认为你匹配的东西的末尾有一条空字符串——这就是被捕捉到的。通过将至少一颗恒星更改为加号来修复,例如:</p>
<pre><code>>>> pat_error = re.compile(r">(\s*\w+)*>")
>>> pat_error.search(text)
<_sre.SRE_Match object at 0x83ba0>
>>> _.groups()
(' the',)
</code></pre>
<p>现在,这个匹配和捕捉合理。第二,在应该使用的地方没有使用原始字符串文字语法,因此在认为有反斜杠的地方没有反斜杠——有一个与chr(1)相同的转义序列<code>\1</code>。使用原始字符串文字语法修复,即在上面的代码片段之后</p>
<pre><code>>>> pat_error.sub(r">\1", text)
'<hi type="italic"> the</hi>'
</code></pre>
<p>或者,可以将所有反斜杠加倍,以避免它们被当作转义序列的开始,但是,原始字符串文字语法可读性要高得多。</p>