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らしさ)を気にしません。

私はPythonで質問するだけです。なぜなら、Pythonは私が入りたいと思っている言語だと思うからです。しかし、Linuxターミナルでそれを行う方法(sed、awkなど)を考えることができれば、私もそのルートに行くことができてうれしいです。

4

1 に答える 1

4

XML と正規表現の照合は、複雑になりすぎて速すぎます。本当にそうすべきではありません

代わりに XML パーサーを使用してください。Python にはいくつかの選択肢があります。

  • ElementTreeは標準ライブラリの一部です
  • lxmlは、高速で機能豊富な C ベースのライブラリです。

ElementTree の例:

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 に答える