54

どこかに数字を含む文字列があり、この数字を単語表記に置き換えようとしています(つまり、3 -> three)。これを行う機能があります。問題は、文字列の残りの部分をそのままにしながら、文字列内の数字を見つけることです。このためにre.sub、「callable」を受け入れることができる関数を使用することにしました。ただし、渡されたオブジェクトは内部であり、_sre.SRE_Matchそれを処理する方法がわかりません。私の関数は、数値またはその文字列表現を受け入れます。

re.sub必要な処理を行う関数で呼び出しをブリッジするために使用できるヘルパー関数をどのように作成すればよいですか? または、私がやりたいことを行うためのより良い方法はありますか?

4

3 に答える 3

70

group()一致する文字列を取得するには、次のように呼び出す必要があります。

import re

number_mapping = {'1': 'one',
                  '2': 'two',
                  '3': 'three'}
s = "1 testing 2 3"

print re.sub(r'\d', lambda x: number_mapping[x.group()], s)

プリント:

one testing two three
于 2013-09-11T09:50:06.093 に答える
27

関数を に適合させるにre.subは、ラムダでラップできます。

re.sub('pattern', lambda m: myfunction(m.group()), 'text')
于 2013-09-11T09:51:25.370 に答える