如何用Python正则表达式从DataFrame提取URL与图片标签
解决方法
步骤1:定义精准正则表达式
针对需求定制正则,避免匹配无关内容:
- 匹配完整
<a>标签:r'<a\s+href="[^"]+"\s+rel="nofollow noreferrer">.*?</a>',精准锁定示例中的<a>结构,确保提取完整标签内容 - 匹配所有
<img>标签:r'<img\s+src="[^"]+"[^>]*?>',兼容带height/width属性的img标签,提取完整标签
步骤2:完整实现代码
import pandas as pd import re # 构造示例DataFrame(可替换为你的实际数据) data = { 'PopupInfo': [ '<img src="https://doc-00-90-mymaps.googleusercontent.com/" height="200" width="auto"/><br><br>', '<img src="https://doc-0c-90-mymaps.googleusercontent.com/"> <br <br> br> <a href="http://hfasia.blogspot.com/2017/02/pla-oth-sw-radar-network-and-its-300-km.html" rel="nofollow noreferrer">http://hfasia.blogspot.com/2017/02/pla-oth-sw-radar-network-and-its-300-km.html</a><br><br><img src="https://doc-0k-90-mymaps.googleusercontent.com/" height="200" width="auto" />', 'Michael 20 JX <a href="https://en.wikipedia.org/wiki/Curvilinear_coordinates" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Curvilinear_coordinates</a>', 'Owen' ], 'OID': [1,2,3,4] } df = pd.DataFrame(data) # 提取完整<a>标签 def extract_a_tags(text): a_tags = re.findall(r'<a\s+href="[^"]+"\s+rel="nofollow noreferrer">.*?</a>', str(text)) return ' '.join(a_tags) if a_tags else 'Null' # 提取所有<img>标签并拼接 def extract_img_tags(text): img_tags = re.findall(r'<img\s+src="[^"]+"[^>]*?>', str(text)) return ' '.join(img_tags) if img_tags else 'Null' # 生成目标列 df['URLs'] = df['PopupInfo'].apply(extract_a_tags) df['Img'] = df['PopupInfo'].apply(extract_img_tags) # 输出结果(仅保留目标列) result_df = df[['URLs', 'Img']] print(result_df)
问题修正说明
- 原
<img>提取函数问题:- 用
re.search仅返回第一个匹配项,且正则匹配所有尖括号内容(含<br>等无关标签),改为re.findall精准匹配img标签,并用apply逐行处理Series
- 用
- 原URL提取函数问题:
- 正则过于复杂且仅提取URL文本,未保留完整
<a>标签,同时误匹配<img>的src属性,改为直接匹配完整<a>标签结构
- 正则过于复杂且仅提取URL文本,未保留完整
内容的提问来源于stack exchange,提问作者Nguyễn Đức Việt
相关产品推荐
相关产品推荐

