使用Python为Pandas DataFrame文本插入HTML锚点标签
Python+Pandas实现文本前序词汇包裹HTML锚点方案
核心逻辑通过正则匹配保证截取位置落在完整单词末尾,逐行处理DataFrame的描述、链接两列,拼接符合要求的HTML锚点内容,代码可直接复用。
依赖导入
import pandas as pd import re
核心处理函数
支持自定义锚点包裹的单词数量,自动适配短文本场景(总词数不足设定值时全量包裹,不会报错)。
def wrap_text_with_anchor(desc_text: str, target_url: str, wrap_word_num: int = 5) -> str: # 正则匹配文本开头指定数量的完整单词,自动忽略前后冗余空白 match_pattern = rf'^(\s*(?:\b\w+\b\s*){{{wrap_word_num}}})' match_result = re.match(match_pattern, desc_text) # 文本总词数小于设定包裹数时,直接全量包裹进锚点 if not match_result: return f'<a href="{target_url}"> {desc_text.strip()}</a>' # 拆分待包裹内容和剩余文本,按格式拼接 wrapped_content = match_result.group(1).strip() remaining_content = desc_text[match_result.end():] return f'<a href="{target_url}"> {wrapped_content}</a>{remaining_content}'
DataFrame批量生成新列
调用apply逐行处理即可生成目标列:
# 替换为实际使用的DataFrame变量名 df['complete'] = df.apply( lambda row: wrap_text_with_anchor(row['description'], row['link']), axis=1 )
效果验证
使用问题给出的示例数据测试,输出完全符合预期:
test_desc = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation""" test_link = "https://www.google.com" print(wrap_text_with_anchor(test_desc, test_link))
输出结果:
<a href="https://www.google.com"> Lorem ipsum dolor sit amet</a>, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
参数调整说明
- 如需修改锚点包裹的单词数量,调用函数时传入
wrap_word_num参数即可,比如要包裹前3个词就写wrap_text_with_anchor(desc, link, wrap_word_num=3) - 函数自动识别单词后的标点位置,不会把标点错误包裹进锚点标签内,也不会出现截断半个单词的问题
- 如果需要适配中文等非英文文本,只需修改正则中
\b\w+\b的单词匹配规则即可
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

