用正则表达式捕获嵌套标签?

时间:2013-01-04 07:40:47

标签: python regex nested

s = '''<p>Plain text, <i>italicized phrase,
 <i>italicized subphrase</i>, <b>bold
 subphrase</b></i>, <i>other italic
 phrase</i></p>'''

r1 = r'''(?sx)(
<i>(
(?!</?i>).
|
<i> ( (?!</?i>). )* </i>
)*</i>
)'''

我使用r1模式捕获字符串s中的<i>...</i>。 但无法捕获<i>italicized subphrase</i>。 为什么呢?

我不是真正处理HTML代码,而是与HTML的嵌套结构类似!我只是以这些代码为例。 我的问题是如何只在一个图层嵌套结构中捕获嵌套和嵌套标记。

1 个答案:

答案 0 :(得分:2)

您正在使用正则表达式,并且将XML与此类表达式匹配得到too complicated, too fast

请不要让自己变得困难并使用HTML解析器,Python有几个可供选择:

ElementTree示例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.html')
for elem in tree.findall('i'):
    print ElementTree.tostring(elem)