说我有字符串
s = 'x x x x x'
我想将“x”之一随机更改为 y
s2 = 'x x y x x'
x 和 y 将是多个字符长。
如果我只想更改 x 的第一个实例,我会使用 string.replace,但是如何更改随机实例?
说我有字符串
s = 'x x x x x'
我想将“x”之一随机更改为 y
s2 = 'x x y x x'
x 和 y 将是多个字符长。
如果我只想更改 x 的第一个实例,我会使用 string.replace,但是如何更改随机实例?
您可以使用re.finditer
来检索所有可能匹配的开始/结束并进行适当的替换。这将涵盖可变长度替换,但确实意味着您需要警惕frm
参数的 re 语法。
import re
from random import choice
def replace_random(src, frm, to):
matches = list(re.finditer(frm, src))
replace = choice(matches)
return src[:replace.start()] + to + src[replace.end():]
例子:
>>> [replace_random('x x x x x', r'\bx\b', 'y') for _ in range(10)]
['y x x x x', 'x x x x y', 'x x y x x', 'x y x x x', 'x x x y x', 'x x x y x', 'x x y x x', 'x y x x x', 'x x x x y', 'x x y x x']
你可以做
import random
def replace_random(string, str_a, str_b):
rand = max(random.randint(0, string.count(str_a)), 1)
return string.replace(str_a, str_b, rand).replace(str_b, str_a, rand - 1)
print replace_random('x x x x x', 'x', 'y')