最好的方法是转换自定义XML语法

Pea*_*ion 5 python xml tags parsing

使用Python.

所以基本上我有一个类似XML的标签语法,但标签没有属性.所以,<a>但不是<a value='t'>.他们定期关闭</a>.

这是我的问题.我有一些看起来像这样的东西:

<al>
1. test
2. test2
 test with new line
3.  test3
<al>
    1. test 4
    <al>
        2. test 5
        3. test 6
        4. test 7
    </al>
</al>
4. test 8
</al>
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

<al>
<li>test</li>
<li> test2</li>
<li> test with new line</li>
<li>  test3
<al>
    <li> test 4 </li>
    <al>
        <li> test 5</li>
        <li> test 6</li>
        <li> test 7</li>
    </al>
    </li>
</al>
</li>
<li> test 8</li>
</al>
Run Code Online (Sandbox Code Playgroud)

我并不是在寻找一个完整的解决方案,而是朝着正确的方向努力.我只是想知道这里的人们如何处理这个问题.唯一的REGEX?为无属性标记语法编写完整的自定义解析器?破解现有的XML解析器?等等

提前致谢

mac*_*mac 0

我只是想知道这里的人们会如何解决这个问题。

我会选择使用解析器。

我的推理是,您尝试执行的操作不仅仅是语法或词汇替换。它更多的是语法转换,这意味着理解文档的结构

在您的示例中,您并不是简单地将每一行括在<li>和之间</li>;您还递归地包含一些跨越多行的文档块(如果这些块代表一个“项目”)。

也许你可以组合一个能够捕获问题的解释逻辑和递归性质的正则表达式,但这样做就像用茶匙挖沟一样:你可以做到,但使用铲子(解析器)是一个很大的问题。更符合逻辑的选择。

使用解析器的另一个原因是“真实的单词”。正则表达式是真正的“语法纳粹”:标记中出现故障,它们将无法工作。另一方面,所有解析器库都是“灵活的”(统一处理不同的拼写,如<a></a>and <a/>or HTML<br>和 XHTML <br/>),有些(例如beautifulsoup)甚至是“宽容的”,这意味着它们会尝试猜测(具有令人惊讶的高水平)准确性)文档作者想要编码的内容,即使文档本身未通过验证。

此外,基于解析器的解决方案比基于正则表达式的解决方案更易于维护。文档结构中的一个小变化可能需要对正则表达式进行根本性的更改(从本质上讲,在 72 小时左右后,它们的作者往往会变得晦涩难懂)。

最后,因为您使用的是 python,因此 readability counts基于解析器的解决方案可能会产生比非常复杂/长/晦涩的正则表达式更多的 pythonic 代码。

哈!