0

说我有字符串

s = 'x x x x x'

我想将“x”之一随机更改为 y

s2 = 'x x y x x'

x 和 y 将是多个字符长。

如果我只想更改 x 的第一个实例,我会使用 string.replace,但是如何更改随机实例?

4

2 回答 2

4

您可以使用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']
于 2013-11-04T16:58:46.393 回答
2

你可以做

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')
于 2013-11-04T16:58:14.327 回答