如何删除此正则表达式中找到的字符?

时间:2012-05-24 18:55:13

标签: python regex

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

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

2 个答案:

答案 0 :(得分:4)

您不应该使用正则表达式来解析XML / HTML,请参阅murgatroid99's comment

话虽如此,以下是使用正则表达式获取本示例所需结果的方法。使用捕获组:

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

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

捕获组的替代方案是lookbehind and lookahead

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

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

答案 1 :(得分:0)

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

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

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

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

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