3

Q 非常业余的程序员,在这里寻求您的帮助。

我必须经常编辑看起来像这样的 xml 文件

    --- blah blah blah plenty xml stuff above ---
    <lex marker="mala" sentiment="negative"/>
    <lex marker="malas" sentiment="negative"/>
    <lex marker="maleducad\p{Ll}*" sentiment="negative" regex="true"/>
    <lex marker="mali\p{Ll}+sima\p{Ll}*" sentiment="negative" regex="true"/>
    <lex marker="mali\p{Ll}+simo\p{Ll}*" sentiment="negative" regex="true"/>
    --- blah blah blah plenty xml stuff below ---

并且使用相当复杂的正则表达式搜索和替换过程,我只能提取标记属性的值。(这就是我所关心的)。

但这很耗时,并且 Python 中必须有非常简单的方法来查找属性 marker="SOME_TEXT" 部分并将所有值放入一个数组中,然后打印出该数组(到文件中)。但我想不通:(

我正在寻找一种不包括导入任何类型的 XML 库的方法,因为我想让它尽可能简单(和合乎逻辑)以供我的业余编程头脑学习)并且我只对数据感兴趣无论如何,来自那个特定的属性,我不关心文件的任何其余部分(或者它是 XML-ness)。

我只在 python 中询问,因为我认为这是我渴望进入的语言。但如果你能想到一个 Linux 终端的方式来做到这一点(sed、awk 等),我也很乐意走这条路。

4

1 回答 1

4

用正则表达式匹配 XML 变得太复杂、太快了。你真的不应该那样做

改用 XML 解析器,Python 有几个可供选择:

  • ElementTree是标准库的一部分
  • lxml是一个快速且功能丰富的基于 C 的库。

元素树示例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.xml')
for elem in tree.findall('lex'):
    print elem.attrib['marker']
于 2013-03-01T10:08:14.010 回答