9

Pythonでの文字列の置換は難しくありませんが、何か特別なことをしたいと思います。

teststr = 'test test test test'
animals = ['bird','monkey','dog','fox']
#replace 'test' with random item from animals
finalstr = ['dog fox dog monkey']

私は非常に非効率的なバージョンを書いています:

from random import choice
import string
import re

teststr = 'test test test test'
animals = ['bird','monkey','dog','fox']

indexes = [m.start() for m in re.finditer('test', 'test test test test')]
#indexes = [0, 5, 10, 15]
for i in indexes:
    string.replace(teststr, 'test', choice(animals), 1)

#Final result is four random animals
#maybe ['dog fox dog monkey']

動作しますが、私がよく知らない正規表現を使用した簡単な方法があると思います。

4

3 に答える 3

11

re.subコールバックを使用します:

import re
import random

animals = ['bird','monkey','dog','fox']

def callback(matchobj):
    return random.choice(animals)

teststr = 'test test test test'
ret = re.sub(r'test', callback, teststr)
print(ret)

収量(例えば)

bird bird dog monkey

の2番目の引数re.subは、文字列または関数(つまり、コールバック)にすることができます。関数の場合、正規表現パターンが重複しないたびに呼び出され、一致した文字列の代わりにその戻り値が置き換えられます。

于 2012-09-16T18:42:39.677 に答える
1

あなたが使用することができますre.sub

>>> from random import choice
>>> import re
>>> teststr = 'test test test test'
>>> animals = ['bird','monkey','dog','fox']
>>> re.sub('test', lambda m: choice(animals), teststr)
'fox monkey bird dog'
>>> re.sub('test', lambda m: choice(animals), teststr)
'fox dog dog bird'
>>> re.sub('test', lambda m: choice(animals), teststr)
'monkey bird monkey monkey'
于 2012-09-16T18:44:11.443 に答える
1

これは仕事をします:

import random, re
def rand_replacement(string, to_be_replaced, items):
    return re.sub(to_be_replaced, lambda x: random.choice(items), string )
于 2012-09-16T19:05:21.887 に答える