0
str = "<test>0</test>"
print re.search("<.*?>", str).group()
print re.search(">.*?<", str).group()
>> <text>
>> >0<

我怎样才能得到它,以便生成的文本是“测试”和“0”,而不包括我在正则表达式中用作标记的两个字符?

4

2 回答 2

4

您不应该使用正则表达式来解析 XML/HTML,请参阅murgatroid99 的评论

话虽如此,这里是您如何使用正则表达式获得此示例所需的结果。使用捕获组:

>>> s = "<test>0</test>"
>>> print re.search(r"<(.*?)>", s).group(1)
test
>>> print re.search(r">(.*?)<", s).group(1)
0

请注意,您不应将str其用作变量名,因为它会掩盖内置类型。

捕获组的替代方法是lookbehind和lookahead

>>> print re.search(r"(?<=<).*?(?=>)", s).group()
test
>>> print re.search(r"(?<=>).*?(?=<)", s).group()
0

使用原始字符串文字 ( r"...") 对这些来说不是特别必要的,但是在编写正则表达式时最好养成使用它们的习惯,以确保正确处理反斜杠。

于 2012-05-24T18:59:47.573 回答
0

您应该将所需的文本放在反向引用中,并且可以使用 re.sub 替换该字符串。

顺便说一句,您可以在 1 个正则表达式中执行此操作:

"<\([^>]\)*>"

我没有测试它,但它应该可以工作,只需用反向引用 (\1) 替换字符串。

编辑:我很抱歉,我没有意识到你也想要标签中的文字..

于 2012-05-24T19:02:16.053 回答