2017-07-08 7 views
0

の最適な代替機能は何ですか?のグローバルパターン置換機能string.gsub(s, pattern, function)Pythonには?例えばPythonでLua string.gsubの最も優れた代替機能は何ですか?

> string.gsub("banana", "(a)(n)", function(a,b) return b..a end) -- reverse any "an"s 
bnanaa 2 

UPDATE:私はPythonのre.subfunctionlambda exprとで実現することができるのLuaのstring.gsubのようなPythonでパターン置換、中に複雑な機能を実装したいと思います。 string.gsub(s, pattern, replace [, n])として

+0

're.sub'は必要な機能です。 –

+0

're.sub'、多分? 're.sub( '(a)(n)'、r '\ 2 \ 1'、 'banana')' * '' best '*は何を意味しますか? – jonrsharpe

+0

@jonrsharpe:私はPythonのパターン置換の際にLuaの 'string.gsub'のような複雑な関数を実装したいと思います。これはPythonの' re.sub'で[function](https://stackoverflow.com)でも実装できます/ a/17136150/7630831)または[lambda expr](https://stackoverflow.com/a/18737927/7630831)を参照してください。 – abuccts

答えて

2

は、一対の値を返します変更された文字列と置換数はPythonで、を作った、あなたはre.subnを使用する必要があります。

re.subn(pattern, repl, string, count=0, flags=0)
sub()と同じ操作を実行しますしかし、タプル(new_string, number_of_subs_made)を返します。

Python demoを参照してください:

import re 
print (re.subn("(a)(n)", r"\2\1", "banana")) 
# => ('bnanaa', 2) 

そして、あなたはまた、交換用の引数として匿名メソッド(または単純なシナリオのためのラムダ式)を使用することがあります。

print (re.subn("(a)(n)", lambda m: "{}{}".format(m.group(2), m.group(1)), "banana")) 
# => ('bnanaa', 2) 

another Python demoを参照してください。

注::交換が必要ない場合は、re.subを使用してください。

関連する問題