0
testString = ("<h2>Tricks</h2>"
              "<a href=\"#\"><i class=\"icon-envelope\"></i></a>")
import re
re.sub("(?<=[<h2>(.+?)</h2>\s+])<a href=\"#\"><i class=\"icon-(.+?)\"></i></a>", "{{ \\1 @ \\2 }}", testString)

これにより、次が生成されますinvalid group reference

置換のみ\\1、抽出のみを取るようenvelopeにすると、後読みが無視されていると思います。後読みから何かを抽出する方法はありますか?

私は生産を楽しみにしています:

<h2>Tricks</h2>
{{ Tricks @ envelope }}
4

1 に答える 1

1

代わりに HTML パーサーを使用したいようです。正規表現と HTML を混在させると、非常に手間がかかり、非常に高速になります。

正規表現では、<、h、2、> などで構成される文字クラス (一致が許可されている文字のセット) を作成しました。

[<h2>(.+?)</h2>\s+]

次のように記述できます。

[<>h2()+.?/\s]

同じ文字に一致します。

一致する文字のセットを作成する場合を除き、[..] を使用しないでください (\s、\d などは事前に作成された文字クラスです)。

ただし、ブラケットを削除したとしても、後読みは許可されません。後読みで可変幅パターンを使用することはできません (+ または * は使用できません)。したがって、文字クラス使用すると、後読みは一致すると思われるものと一致しなくなります。それがなければ、後読みは許可されません。

全体として、代わりにBeautifulSoupだけです。

于 2013-02-06T16:05:03.477 に答える