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