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

如何将带制表符缩进的Python字符串转为层级化HTML列表并替换项目符号?

我来帮你解决这个问题!我们可以用Python内置库实现一个可靠的转换方案,通过跟踪缩进层级来构建嵌套HTML列表,同时处理项目符号的层级替换,完美解决你之前遇到的缩进错误和符号替换问题。

解决方案代码

def convert_to_nested_html(text):
    # 定义层级循环使用的项目符号
    BULLETS = ['-', '*', 'o']
    # 复用的样式字符串,减少冗余
    LIST_STYLE = 'display:block; list-style-type:none; line-height: 17px; font: 13px "Times New Roman";'
    SPAN_STYLE = 'display:block; font: 13px "Times New Roman"'
    
    # 分割文本为行,过滤空行并去除换行符残留
    lines = [line.rstrip('\r') for line in text.split('\n') if line.strip()]
    result = [f'<span style="{SPAN_STYLE}">']
    # 栈结构:(当前层级, 是否已打开li标签),初始为最外层层级
    stack = [(0, False)]
    
    for line in lines:
        # 计算当前行的缩进层级:开头制表符的数量
        current_level = len(line) - len(line.lstrip('\t'))
        content = line.lstrip('\t')
        
        # 替换项目符号:如果行首是'- ',按层级替换为对应符号
        if content.startswith('- '):
            bullet = BULLETS[current_level % len(BULLETS)]
            content = f'{bullet} {content[2:]}'
        
        # 调整嵌套层级:关闭多余的上层列表和li
        while stack[-1][0] > current_level:
            result.append('</li>')
            result.append('</ul>')
            stack.pop()
        
        # 同级行:关闭上一个li(如果已打开)
        if stack[-1][0] == current_level and stack[-1][1]:
            result.append('</li>')
        
        # 子层级:打开新的ul列表
        if stack[-1][0] < current_level:
            result.append(f'<ul style="{LIST_STYLE}">')
            stack.append((current_level, False))
        
        # 添加当前行的li标签
        result.append(f'<li>{content}</li>')
        stack[-1] = (current_level, True)
    
    # 关闭所有未闭合的li和ul标签
    while len(stack) > 1:
        result.append('</li>')
        result.append('</ul>')
        stack.pop()
    # 闭合最外层span
    result.append('</span>')
    
    # 拼接并返回格式化后的HTML
    return '\n'.join(result)

# 测试你的示例输入
a = 'The Distribution as follows:\n\t\t- 71% as follows:\n\t\t\tfirst, to A;\n\t\t\tsecond, to B;\n\t\t\tthird, to C, D, and E as follows:\n\t\t\t\t- 15% to C\n\t\t\t\t- 85% to D and E.\n\t\t- 29% to F.'
print(convert_to_nested_html(a))

代码逻辑说明

  1. 层级与符号管理:通过统计每行开头的制表符数量确定嵌套层级,循环使用预设的项目符号列表实现层级符号替换。
  2. 栈结构控制嵌套:用栈跟踪当前的嵌套层级和标签状态,动态处理<ul>和<li>的开闭,彻底解决之前的缩进错误问题。
  3. 样式复用:把重复的CSS样式抽离成变量,让代码更简洁易维护。
  4. 边界处理:自动过滤空行,遍历结束后自动闭合所有未关闭的标签,保证HTML结构的完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:08:08