インデントレベルによって一致するXML:Pythonの正規表現私はこのようなXMLファイル与えられてい
...
<a foobar="1">
//Begin match here
<a foobar="1">
<a foobar="1">
<a foobar="1"/>
<a foobar="2"/>
</a>
<a foobar="2">
<a foobar="3"/>
<a foobar="4"/>
</a>
</a>
//End match here
//Begin match here
<a foobar="2">
<a foobar="2">
<a foobar="5"/>
<a foobar="6"/>
</a>
</a>
//End match here
</a>
<a foobar="3">
//Begin match here
<a foobar="3">
...
</a>
//End match here
</a>
...
*コメントは私が中に追加された、彼らは実際にファイルに存在しないが
**私の例では、値は連続していますが、私が今扱っているファイルではそうではありません。
***各インデントレベルは、レベルごとに4つのスペースで厳密にインデントされています。空白とのマッチングは重要ではありませんが、データを分ける必要があるだけですが、空白にも一致する方が簡単な場合は
最初のインデントのすべてのタグを一致させようとしています行(およびそれらのツリーのすべての内容)。理想的には、re.findallを使用して複数行の文字列のリストを生成したいのですが、複数行の文字列を生成することはできません。このために動作する式。
私はこの表現しようとしました:
re.findall("\n({4}<a foobar=\"[0-9]+\">.+ {4}</a>)\n", filecontents, re.DOTALL)
をしかし、それは単に最後の試合がどうあるべきかの終わりに最初の試合がどうあるべきかの初めから1つの複数行の文字列にマッチします。
私はこの時点でこれを認めようと思っているよりもずっと長く苦労してきました。これにマッチする表現を作成する助けがあれば大いに感謝します。また、私はこれを非常にうまく説明できなかった場合には謝罪します。解決するためにもっと情報が必要な場合は教えてください!
トライのXPath:http://www.freeformatter.com/xpath-tester.html – deathangel908
あなたが実際にXMLファイル内のテキストのセクションを一致させたい、またはあなただけの特定のXMLを取得したいんですか要素?生のテキストにマッチさせるのではなく、XML構造を認識しているXPathのようなものを使うほうが簡単でしょう。 – BrenBarn
[RegExはXHTML内蔵タグ以外のオープンタグと一致する可能性があります](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – inetphantom