MST

星途 面试题库

面试题:Python正则匹配任意单个字符在复杂文本结构中的优化

假设你有一个非常长且结构复杂的文本,其中包含多种不同格式的数据(如JSON片段、XML片段、普通文本段落等)。现在要求你使用Python正则表达式中匹配任意单个字符的特性,提取出所有XML标签内的文本内容,同时要尽可能优化匹配效率,避免因文本过长导致的性能问题。请详细阐述你的思路并给出核心代码实现。
27.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

思路

  1. 匹配XML标签结构:利用正则表达式re.DOTALL标志,使得.可以匹配包括换行符在内的任意字符。XML标签以<开始,以>结束,对于标签内文本,可通过(.*?)进行非贪婪匹配,这样能确保在遇到第一个>时就停止匹配,避免过度匹配。
  2. 优化性能:由于文本很长,可考虑分块读取文本,避免一次性加载整个文本到内存。但在本题中,使用re.finditer函数而不是re.findall函数,re.finditer返回一个迭代器,在匹配到结果时才返回,而不是一次性返回所有结果,这样在处理长文本时更节省内存。

核心代码实现

import re


def extract_xml_text(long_text):
    pattern = re.compile(r'<.*?>(.*?)</.*?>', re.DOTALL)
    results = []
    for match in re.finditer(pattern, long_text):
        results.append(match.group(1))
    return results


你可以这样调用这个函数:

long_text = "<root>content1</root><other>content2</other>"
print(extract_xml_text(long_text))

在上述代码中,re.compile函数将正则表达式编译成模式对象,re.finditer函数在文本中查找所有匹配的子字符串,match.group(1)提取到XML标签内的文本内容并添加到结果列表中最后返回。