MST
星途 面试题库

面试题:Python中if语句结合正则表达式的专家级应用

编写一个Python程序,它接收一个复杂的HTML文档字符串作为输入。使用if语句结合正则表达式,首先识别出所有的HTML标签,然后判断哪些标签是自闭合标签(如<input> ),哪些是有开始和结束标签对的(如<p>...</p> )。同时,对于有属性的标签,提取出标签名和属性信息。最后,将这些信息以一种合理的数据结构(如字典嵌套列表等)进行存储并返回。
47.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import re


def parse_html(html_str):
    # 匹配所有标签
    tag_pattern = re.compile(r'<\s*([^>\s/]*)(\s+[^>]*?)?\s*(\/?)>')
    tags_info = []
    for match in tag_pattern.finditer(html_str):
        tag_name = match.group(1)
        attrs_str = match.group(2)
        is_self_closing = bool(match.group(3))
        attrs = {}
        if attrs_str:
            attr_pattern = re.compile(r'\s*(\w+)\s*=\s*"([^"]*)"')
            for attr_match in attr_pattern.finditer(attrs_str):
                attrs[attr_match.group(1)] = attr_match.group(2)
        tag_info = {
            "tag_name": tag_name,
            "attributes": attrs,
            "is_self_closing": is_self_closing
        }
        tags_info.append(tag_info)
    return tags_info


你可以使用以下方式调用这个函数:

html_doc = '<div class="test">content <input type="text" value="123" /> more content</div>'
result = parse_html(html_doc)
print(result)

上述代码解释:

  1. 使用re.compile定义一个正则表达式,用于匹配HTML标签。
  2. 遍历正则表达式的匹配结果,提取标签名、属性字符串和是否自闭合的信息。
  3. 如果存在属性字符串,再使用另一个正则表达式提取属性名和属性值,并存储到字典中。
  4. 将每个标签的信息存储到一个列表中,列表元素是字典,包含标签名、属性字典和是否自闭合的信息。
  5. 最后返回这个列表。

测试部分给出了一个简单的HTML字符串,调用parse_html函数并打印结果。