gpt4 book ai didi

python - 将 HTML 列表 (
  • ) 转换为制表符(即缩进)
  • 转载 作者:搜寻专家 更新时间:2023-10-31 22:49:08 24 4
    gpt4 key购买 nike

    曾使用过数十种语言,但对 Python 不熟悉。

    这是我的第一个(也许是第二个)问题,所以要温和...

    试图有效地将类似 HTML 的 markdown 文本转换为 wiki 格式(特别是,Linux Tomboy/GNote notes 到 Zim)并且在转换列表时卡住了。

    对于像这样的 2 级无序列表...

    • 一级
      • 二级

    假小子/GNote 使用类似...

    <list><list-item>First level<list><list-item>Second level</list-item></list></list-item></list>

    但是,Zim 个人 wiki 希望这样...

    * First level
    * Second level

    ... 带有前导标签。

    我研究了 regex 模块函数 re.sub()、re.match()、re.search() 等,发现 Python 能够将重复文本编码为...

     count * "text"

    因此,看起来应该有一种方法可以做类似...

     newnote = re.sub("<list>", LEVEL * "\t", oldnote)

    其中 LEVEL 是 <list> 的序数(出现)在笔记中。因此它将是0对于第一个<list>遭遇,1对于第二个,等等。

    LEVEL 将在每次 </list> 时递减遇到了。

    <list-item>标签被转换为项目符号的星号(在适当的情况下以换行符开头)和 </list-item>标记已删除。

    最后...问题...

    • 如何获取 LEVEL 的值并将其用作制表符乘数?

    最佳答案

    您确实应该使用 xml 解析器来执行此操作,但要回答您的问题:

    import re

    def next_tag(s, tag):
    i = -1
    while True:
    try:
    i = s.index(tag, i+1)
    except ValueError:
    return
    yield i

    a = "<list><list-item>First level<list><list-item>Second level</list-item></list></list-item></list>"

    a = a.replace("<list-item>", "* ")

    for LEVEL, ind in enumerate(next_tag(a, "<list>")):
    a = re.sub("<list>", "\n" + LEVEL * "\t", a, 1)

    a = a.replace("</list-item>", "")
    a = a.replace("</list>", "")

    print a

    这将适用于您的示例,并且仅适用于您的示例。使用 XML 解析器。您可以使用 xml.dom.minidom(它包含在 Python(至少 2.7)中,无需下载任何东西):

    import xml.dom.minidom

    def parseList(el, lvl=0):
    txt = ""
    indent = "\t" * (lvl)
    for item in el.childNodes:
    # These are the <list-item>s: They can have text and nested <list> tag
    for subitem in item.childNodes:
    if subitem.nodeType is xml.dom.minidom.Element.TEXT_NODE:
    # This is the text before the next <list> tag
    txt += "\n" + indent + "* " + subitem.nodeValue
    else:
    # This is the next list tag, its indent level is incremented
    txt += parseList(subitem, lvl=lvl+1)
    return txt

    def parseXML(s):
    doc = xml.dom.minidom.parseString(s)
    return parseList(doc.firstChild)

    a = "<list><list-item>First level<list><list-item>Second level</list-item><list-item>Second level 2<list><list-item>Third level</list-item></list></list-item></list></list-item></list>"
    print parseXML(a)

    输出:

    * First level
    * Second level
    * Second level 2
    * Third level

    关于python - 将 HTML 列表 (<li>) 转换为制表符(即缩进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161168/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com