面试题答案
一键面试思路
- 匹配XML标签结构:利用正则表达式
re.DOTALL
标志,使得.
可以匹配包括换行符在内的任意字符。XML标签以<
开始,以>
结束,对于标签内文本,可通过(.*?)
进行非贪婪匹配,这样能确保在遇到第一个>
时就停止匹配,避免过度匹配。 - 优化性能:由于文本很长,可考虑分块读取文本,避免一次性加载整个文本到内存。但在本题中,使用
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标签内的文本内容并添加到结果列表中最后返回。