0

次のような jsp ページ (不正な形式の xml) から情報を取得しようとしています (再帰は必要ありません)。

<td>
<html:button ...></html:button>
<html:submit ...></html:submit></td>

そして正規表現:

<html:(button|submit|cancel)[\s\S]*?</html:(button|submit|cancel)>

re.findall() は、次のようにタプルのリストを提供しています。

[('button','button'),('button','button')]

ドキュメントから理解していることは正しいですが、次のようなものを探しています:

["<html:button ...>","<html:button ...>"]

私が期待する結果を得るための適切な方法は何ですか?

4

2 に答える 2

3

正規表現はおそらくこれでやりたいことではないという事実は別として、必要なビットを括弧を使用してグループに入れたいと考えています。終了タグまでのすべてが必要な場合は、次の</html:whatever>ようになります。

(<html:(button|submit|cancel)[\s\S]*?)</html:(button|submit|cancel)>

少しだけ必要な場合は、次<html:button>を使用します。

(<html:(button|submit|cancel)>)[\s\S]*?</html:(button|submit|cancel)>

例えば

から

<html:button>foobar</html:submit>

あなたが得る:

('<html:button>', 'button', 'submit')

上記から取得したい場合は、次foobarを使用します。

(<html:(button|submit|cancel)>)([\s\S]*?)</html:(button|submit|cancel)>

取得するため:

('<html:button>', 'button', 'foobar', 'submit')

一般に、開始タグと終了タグを一致させることはできないことに注意してください (上記の例で<html:button>は、開かれ、</html:submit>閉じられていることに注意してください)。それを行う必要がある場合は、適切なパーサーを使用してください。

于 2010-03-03T10:30:06.440 に答える
1

キャプチャ(button|submit|cancel)を取得するので、次のよう?:に括弧で追加します(?:

>>> re.findall('<html:(?:button|submit|cancel)[\s\S]*?</html:(?:button|submit|cancel)>',TheHTMLWhichShouldntParseWithRegex)
['<html:button ...></html:button>', '<html:submit ...></html:submit>']
于 2010-03-03T10:30:42.277 に答える