2012-05-24 59 views
0
str = "<test>0</test>" 
print re.search("<.*?>", str).group() 
print re.search(">.*?<", str).group() 
>> <text> 
>> >0< 

我怎样才能得到它,以便产生的文本是“测试”和“0”,并且不包括我在正则表达式中用作标记的两个字符?如何删除从这个正则表达式找到的字符?

+3

您可能需要阅读http://stackoverflow.com/questions/1732348/regex-match-open- tags-except-xhtml-self-contained-tags,特别是如果这是解析XML的更普通程序的一部分 – murgatroid99

回答

4

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

这就是说,这里是如何使用正则表达式得到你想要的结果。使用捕获组:你不应该使用str作为变量名,因为它会掩盖内置型

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

注意。

的捕获组的替代将是一个lookbehind and lookahead

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

使用原始字符串(r"...")没有必要为这些特别的,但它是很好的进入使用它们的习惯编写正则表达式时要确保正确处理反斜杠。

0

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

顺便说一句,你可以在1个正则表达式做到这一点:

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

我没有测试它,但它应该工作,仅仅通过反向引用替换字符串(\ 1)。

编辑:我的道歉,我不知道你想在标签过于文本..

相关问题