You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定HTML标签分割字符串并保留标签?

保留HTML标签的字符串分割方案

问题场景

我需要按指定HTML标签(<li>、<ul>、<ol>、<dl>、<dt>、<dd>、<h1>至<h6>)分割字符串,最初写了正则表达式:

pattern = '<li>|<ul>|<ol>|<dl>|<dt>|<dd>|<h1>|<h2>|<h3>|<h4>|<h5>|<h6>'

用re.split处理后,虽然能完成分割,但丢失了起始标签,测试示例如下:

import re

test_string = '<p> Some text some text some text. </p> <p> Another text another text </p>. <li> some list </li>. <ul> another list </ul>'
res = re.split(pattern, test_string) 
print(res)
# 输出:
# ['<p> Some text some text some text. </p> <p> Another text another text </p>. ', ' some list </li>. ', ' another list </ul>']

我期望分割后起始标签能和对应内容保留在同一个元素里,得到如下结果:

['<p> Some text some text some text. </p> <p> Another text another text </p>. ', '<li> some list </li>. ', '<ul> another list </ul>']

解决方案

核心思路是用正则捕获组保留分割时的标签,再将标签与后续内容合并:

  1. 修改正则表达式,添加捕获组
    把每个标签匹配项放在括号()中,这样re.split会将捕获到的标签作为独立元素保留在结果里:
pattern = r'(<li>|<ul>|<ol>|<dl>|<dt>|<dd>|<h1>|<h2>|<h3>|<h4>|<h5>|<h6>)'
  1. 执行分割,得到包含标签的中间结果
split_result = re.split(pattern, test_string)
print(split_result)
# 输出:
# ['<p> Some text some text some text. </p> <p> Another text another text </p>. ', '<li>', ' some list </li>. ', '<ul>', ' another list </ul>']
  1. 合并标签与对应内容
    遍历分割结果,将相邻的标签元素和内容元素拼接,同时过滤空字符串:
final_result = []
i = 0
while i < len(split_result):
    if split_result[i]:
        # 判断当前元素是否为标签,若是则和下一个内容元素合并
        if i + 1 < len(split_result) and split_result[i].startswith('<'):
            final_result.append(split_result[i] + split_result[i+1])
            i += 2
        else:
            final_result.append(split_result[i])
            i += 1

print(final_result)
# 输出符合预期的结果:
# ['<p> Some text some text some text. </p> <p> Another text another text </p>. ', '<li> some list </li>. ', '<ul> another list </ul>']

也可以用更简洁的切片+列表推导式实现合并:

final_result = []
# 处理第一个非标签内容块
if split_result[0]:
    final_result.append(split_result[0])
# 成对处理标签和内容
for tag, content in zip(split_result[1::2], split_result[2::2]):
    final_result.append(tag + content)

内容的提问来源于stack exchange,提问作者Alex Nikitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:21:01