温馨提示×

python爬虫正则匹配如何处理嵌套

小樊
81
2024-12-05 14:42:36
栏目: 编程语言

在Python中,处理嵌套的正则表达式可以使用递归模式。这里有一个例子,展示了如何使用re库匹配嵌套结构,例如HTML标签中的嵌套。

import re

def match_nested(pattern, text):
    stack = []
    result = []
    current_match = None

    for i, char in enumerate(text):
        if char == '<':
            if stack:
                current_match = re.search(pattern, text[i:])
                if current_match:
                    result.append(current_match.group())
                    stack.pop()
                    continue
        elif char == '>':
            stack.pop()

        if not stack and current_match:
            result.append(current_match.group())
            current_match = None

    return result

# 示例
html = '''
<div>
    <p>这是一个段落。</p>
    <ul>
        <li>列表项1</li>
        <li>列表项2</li>
    </ul>
</div>
'''

pattern = r'<[^>]+>'
matches = match_nested(pattern, html)
print(matches)

这个例子中,match_nested函数使用一个栈来处理嵌套的正则表达式。当遇到<时,它会将当前的索引和字符压入栈中,然后尝试在当前索引处匹配正则表达式。如果匹配成功,它将结果添加到结果列表中,并从栈中弹出一个元素。当遇到>时,它将从栈中弹出一个元素。如果在遍历完文本后栈为空且当前匹配有效,它会将结果添加到结果列表中。

请注意,这个例子仅适用于简单的HTML嵌套结构。对于更复杂的嵌套结构,建议使用HTML解析库(如BeautifulSoup)来处理。

0