29

この (非常に単純化された) 文字列の例を考えてみましょう:

1aw2,5cx7

ご覧のとおりdigit/letter/letter/digit、コンマで区切られた 2 つの値です。

これで、これを次のように一致させることができます。

>>> from re import match
>>> match("\d\w\w\d,\d\w\w\d", "1aw2,5cx7")
<_sre.SRE_Match object at 0x01749D40>
>>>

問題は、しかし、私は\d\w\w\d2回書かなければならないということです. 小さなパターンでは、これはそれほど悪くはありませんが、より複雑な正規表現では、まったく同じことを 2 回記述すると、最終パターンが膨大になり、扱いにくくなります。また、冗長なようです。

名前付きキャプチャ グループを使用してみました:

>>> from re import match
>>> match("(?P<id>\d\w\w\d),(?P=id)", "1aw2,5cx7")
>>>

しかし、 ではなく の 2 回の出現を探していたため、機能し1aw2ませんでしdigit/letter/letter/digitた。

などのパターンの一部を保存して\d\w\w\d、後で同じパターンで使用できるようにする方法はありますか? つまり、パターン内のサブパターンを再利用できますか?

4

6 に答える 6

8

注: これはモジュールではなく、PyPi 正規表現モジュールreで機能します。

あなたの場合、表記を使用でき(?group-number)ます:

(\d\w\w\d),(?1)

それは以下と同等です:

(\d\w\w\d),(\d\w\w\d)

\wが含まれていることに注意してください\d。正規表現は次のようになります。

(\d[a-zA-Z]{2}\d),(?1)
于 2014-02-04T18:27:23.637 に答える
-1

後方参照を使用してみてください。一致するように以下のように機能すると思います

1aw2,5cx7

あなたが使用することができます

(\d\w\w\d),\1

参考はこちらhttp://www.regular-expressions.info/backref.html

于 2013-11-05T17:18:19.013 に答える