ユースケースはわかりませんがreplace
、count
パラメーターを 1 に設定すると機能しますか?
>>> test = 'This is a VERB! Whoa, a VERB? Yeah, a VERB!#$%'
>>> test.replace('VERB', 'running', 1)
'This is a running! Whoa, a VERB? Yeah, a VERB!#$%'
>>> test.replace('VERB', 'running', 1).replace('VERB', 'swimming', 1).replace('VERB', 'sleeping', 1)
'This is a running! Whoa, a swimming? Yeah, a sleeping!#$%'
当然、繰り返し回数を調整する必要がありますが、句読点はうまく処理できるはずです。
以下の@mgilsonの提案に従って、次のreplace
ようなことを行うことで、への多数の呼び出しを削除できます。
In [14]: s = 'This is a VERB! Whoa, a VERB? Yeah, a VERB!#$%'
In [15]: verbs = ['running', 'jumping', 'swimming']
In [16]: reduce(lambda x, y: x.replace('VERB', y, 1), verbs, s)
Out[16]: 'This is a running! Whoa, a jumping? Yeah, a swimming!#$%'
これは、置換する値としての値を使用して、メイン文字列でreduce
実行する関数を使用します。reduce の最後の引数は文字列そのもので、各反復での置換の結果が含まれます (最初は「通常の」文字列になります)。replace
verbs