たとえば、コロンの間が欲しいのですが、前のコンテンツにコロンが入っていて混乱する可能性があるため、最後から一致させる必要があります。
コロンを使用するもの:
コロンを使用する他の何か:
:IWantWhatIsInHere:
なにか
なにか
という名前の文字列があると仮定すると、次のように動作するはずですtext
。
import re
data = re.search(r'.*:([^:]*):', text, re.DOTALL).group(1)
.*
正規表現の先頭にある貪欲さにより:
、「ファイルの最後から」の要件を満たすために、一致が可能な限り最後に開始されることが保証されます。改行文字にも一致するように、re.DOTALL
フラグがあります。.*
正規表現の:([^:]*):
部分は、実際に「IWantWhatIsInHere」に一致する場所であり、「「[^:]*
ではない任意の数の文字に一致する」ことを意味:
し、括弧は一致をキャプチャ グループに保存します。
group(1)
最初のキャプチャ グループの内容を取得するために呼び出す一致が見つかったら、これが必要なデータになります。
これは機能します:
>>> tgt='''\
... something that uses a colon:
...
... something else that uses a colon:
...
... :IWantWhatIsInHere:
...
... something
...
... something'''
>>> re.search(r':([^:]*):[^:]*$',tgt,re.DOTALL).group(1)
'IWantWhatIsInHere'
行末アンカーで動作します。