面试题答案
一键面试import re
html = '<div><p>外层段落 <span>内层文本</span></p></div>'
pattern = re.compile(r'<[^>]*>(.*?)</[^>]*>')
result = pattern.findall(html)
print(result)
实现思路
- 导入re模块:Python的
re
模块提供了正则表达式操作的功能。 - 定义正则表达式:
r'<[^>]*>(.*?)</[^>]*>'
。<[^>]*>
:匹配开始标签,[^>]*
表示匹配除>
以外的任意字符0次或多次,这样就匹配到了<div>
、<p>
、<span>
这样的开始标签。(.*?)
:这是一个捕获组,.*?
表示匹配除换行符以外的任意字符0次或多次,并且是非贪婪模式,即尽可能少地匹配,这样就可以捕获到开始标签和结束标签之间的文本。</[^>]*>
:匹配结束标签,</
表示结束标签的开始,[^>]*
匹配除>
以外的任意字符0次或多次,这样就匹配到了</div>
、</p>
、</span>
这样的结束标签。
- 使用
re.findall
函数:re.findall
函数会在字符串中查找所有符合正则表达式的内容,并以列表形式返回所有捕获组的内容,从而得到['外层段落 ', '内层文本']
。