たとえば、単一のREで次の形式の文字列をどのように認識できますか。
LenOfStr:Str
この形式の文字列の例は次のとおりです。
5:5:str
探している文字列は「5:str」です。
Pythonでは、おそらく次のようなものです(これは機能していません):
r'(?P<len>\d+):(?P<str>.{int((?P=len))})'
一般に、以前に一致したグループを使用する前に変更する方法はありますか、それともRE以外の質問をしました。
ありがとう。
はい、あなたが説明しているのは正規表現の範囲外です。正規表現は実際の文字データのみを扱います。これにより、コンテキストに応じて一致を作成する機能が制限されます(たとえば、(.)\1同じ文字を2回一致させる)が、進行中の一致の一部に任意の関数を適用して、後で同じ一致で結果を使用することはできません。
正規表現に一致するテキストを検索し(\d+):\w+、結果を後処理して、文字列の長さが一致の最初の部分のint値と等しいかどうかを確認するなどの操作を行うことができます。ただし、マッチングプロセス自体の一部としてそれを行うことはできません。
さて、これは正規表現で行うことができます(私が質問を理解している場合):
>>> s='5:5:str and some more characters...'
>>> m=re.search(r'^(\d+):(.*)$',s)
>>> m.group(2)[0:int(m.group(1))]
'5:str'
前の一致グループを動的に変更するだけでは実行できません。
あなたはそれを次のように単一の正規表現のように笑わせることができます:
>>> re.sub(r'^(\d+):(.*)$',lambda m: m.group(2)[0:int(m.group(1))],s)
'5:str'