私にはs="gh3wef2geh4ht"
があります。 subを使用してs="gh333wef22geh4444ht"
を受け取るにはどうすればよいですか。私はこれを試しましたregexp。私が間違っていることは何ですか?regex sub(Python)を使った文字列の数字の複製
s=re.sub(r"(\d)",r"\1{\1}",s)
私にはs="gh3wef2geh4ht"
があります。 subを使用してs="gh333wef22geh4444ht"
を受け取るにはどうすればよいですか。私はこれを試しましたregexp。私が間違っていることは何ですか?regex sub(Python)を使った文字列の数字の複製
s=re.sub(r"(\d)",r"\1{\1}",s)
あなたは、置換パターンの正規表現パターンを使用することはできません。 {...}
は、グループ1でキャプチャしたテキストをコピーしません。n回。あなたが望むものを達成するためにre.sub
にラムダ式やコールバックメソッドを使用する必要があります。
import re
s = 'gh3wef2geh4ht'
s=re.sub(r"\d", lambda m: m.group() * int(m.group()), s)
print(s)
マッチ全体がすでにあるとして、あなたは、ここで任意のキャプチャグループを必要としないPython demo
ノートを参照してください。グループ0ここ
で利用可能な、m
はm.group()
が試合のテキスト値であるとint(m.group())
がint
へ桁のキャストである、カレンマッチオブジェクトが割り当てられています。したがって、3
が一致すると、ラムダ式はちょうど"3" * 3
となり、置換えとして返されます。
あなたはマッチした数字をキャプチャし、それを繰り返すためにlambda
機能を使用することができます。
s="gh3wef2geh4ht"
re.sub(r'(\d)', lambda m: m.group(1) * int(m.group(1)), s)
# 'gh333wef22geh4444ht'