插件窝 干货文章 如何用正则表达式高效提取HTML中特定div标签下的li文本内容?

如何用正则表达式高效提取HTML中特定div标签下的li文本内容?

匹配 正则 标签 表达式 328    来源:    2025-03-15

要高效提取HTML中特定<div>标签下的<li>文本内容,可以使用正则表达式结合适当的模式匹配。以下是一个示例Python代码,展示如何使用正则表达式来实现这一目标:

import re

# 示例HTML内容
html_content = """
<div class="target-div">
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
    </ul>
</div>
<div class="other-div">
    <ul>
        <li>Other Item 1</li>
        <li>Other Item 2</li>
    </ul>
</div>
"""

# 正则表达式模式
pattern = r'<div class="target-div">.*?<ul>(.*?)</ul>.*?</div>'

# 使用re.DOTALL标志使.匹配包括换行符在内的所有字符
match = re.search(pattern, html_content, re.DOTALL)

if match:
    # 提取<ul>标签内的内容
    ul_content = match.group(1)

    # 提取<li>标签内的文本内容
    li_pattern = r'<li>(.*?)</li>'
    li_matches = re.findall(li_pattern, ul_content)

    # 输出结果
    for li_text in li_matches:
        print(li_text)
else:
    print("未找到目标div标签")

代码解释:

  1. 正则表达式模式

    • r'<div class="target-div">.*?<ul>(.*?)</ul>.*?</div>':这个模式匹配<div class="target-div">标签内的所有内容,并捕获<ul>标签内的内容。
    • .*?:非贪婪匹配,确保匹配尽可能少的内容。
    • (.*?):捕获组,用于提取<ul>标签内的内容。
  2. re.DOTALL标志:使.匹配包括换行符在内的所有字符,确保跨行匹配。

  3. 提取<li>标签内容

    • r'<li>(.*?)</li>':这个模式匹配<li>标签内的文本内容。
    • re.findall:返回所有匹配的<li>标签内容。

输出结果:

Item 1
Item 2
Item 3

注意事项:

  • 正则表达式在处理复杂的HTML时可能会遇到困难,尤其是当HTML结构复杂或嵌套较深时。对于更复杂的HTML解析任务,建议使用专门的HTML解析库,如BeautifulSouplxml
  • 正则表达式在处理HTML时可能会因为标签属性的变化(如classid的不同)而失效,因此在使用正则表达式时要确保HTML结构相对稳定。