【问题标题】:capture nested tags with regex?用正则表达式捕获嵌套标签?
【发布时间】:2013-01-04 07:40:46
【问题描述】:
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 中的&lt;i&gt;...&lt;/i&gt;。 但是无法捕获&lt;i&gt;italicized subphrase&lt;/i&gt;。 为什么?

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

【问题讨论】:

标签: python regex nested


【解决方案1】:

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

请不要对自己太苛刻,改用 HTML 解析器,Python 有多种可供选择:

  • ElementTree 是标准库的一部分
  • BeautifulSoup 是一个受欢迎的第三方库
  • lxml 是一个快速且功能丰富的基于 C 的库。

元素树示例:

from xml.etree import ElementTree

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

【讨论】:

  • 我只是以这个 HTML 为例,我并没有真正解析 HTML 代码。
  • 而我的问题是如何只用一层嵌套来捕获嵌套标签和嵌套标签(不是 HTML 标签,不是我自己定义的类似标签)?
  • @ThunderEX:你应该解析 HTML 代码。正则表达式中的嵌套标签是hard,你真的想避免这种痛苦。
  • 对于lxml,标签是什么并不重要,只要有标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多