如何用不同的数字替换字符串中的所有匹配项

时间:2011-12-18 15:01:53

标签: python

我的生活中从未使用过python。我需要对给定的代码进行一些修复。

我需要替换这个

 new_q = q[:q.index('?')] + str(random.randint(1,rand_max)) + q[q.index('?')+1:]

用什么东西代替所有出现的?随机的,不同的数字。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

import re
import random
a = 'abc?def?ghi?jkl'
rand_max = 9

re.sub(r'\?', lambda x:str(random.randint(1,rand_max)), a)

# returns 'abc3def4ghi6jkl'

或没有正则表达式:

import random
a = 'abc?def?ghi?jkl'
rand_max = 9
while '?' in a:
    a = a[:a.index('?')] + str(random.randint(1,rand_max)) + a[a.index('?')+1:]

答案 1 :(得分:2)

如果您需要将所有数字设置为不同,则仅为?的每次出现使用新的随机数是不够的 - 随机数可能会出现两次。在这种情况下,您可以使用以下代码:

random_numbers = iter(random.sample(range(1, rand_max + 1), q.count("?")))
new_q = "".join(c if c != "?" else str(next(random_numbers)) for c in q)