我的问题是如何优化我目前正在进行文本替换的方式。
我正在构建一个脚本,用于显示内部变量的问题,并在运行脚本时替换为随机实际值。
我的脚本目前执行类似于以下内容(使用随机库):
def rand_var():
rndvar = ['one', 'two', 'three']
shuffle(rndvar)
return rndvar
rndvar = rand_var()
x = 'blah blah VAR1 blah blah VAR2 blah blah'
x = x.replace('VAR1', rndvar[0])
x = x.replace('VAR2', rndvar[1])
rndvar列表是随机的,在字符串x中,VAR1被第一个随机元素替换,VAR2被第二个替换。
我想知道是否有办法重写多个x = x.replace行,这样我仍然可以将字符串(问题)中的变量指定为VAR1 VAR2等,但让单个替换行知道VAR1表示用rndvar [0]替换,VAR2表示用rndvar [1]等替换
我的问题(字符串)将包含表示不同内容(但所有字符串)的多个列表中的元素。
感谢所有回复,我很感激!
答案 0 :(得分:2)
单次通过替换的一个选项是Collections.emptyList()
:
re.sub
您还可以使用简单的x = re.sub(r'\bVAR(\d+)\b', lambda m: rndvar[int(m.group(1)) - 1], x)
循环替换传递:
zip
答案 1 :(得分:2)
您可以使用正则表达式和字符串格式:
import re
from random import shuffle
def rand_var():
rndvar = ['one', 'two', 'three']
shuffle(rndvar)
return rndvar
rndvar = rand_var()
x = 'blah blah VAR1 blah blah VAR2 blah blah'
new_x = re.sub('(?<=\s)VAR\d+(?=\s)', '{}', x).format(*[rndvar[i] for i in map(int, re.findall('(?<=VAR)\d+', x))])
输出(随机生成):
'blah blah one blah blah two blah blah'
答案 2 :(得分:1)
您可以轻松遍历rndVar
数组并使用索引指定替换字符串
def rand_var():
rndvar = ['one', 'two', 'three']
shuffle(rndvar)
return rndvar
rndvar = rand_var() #['one', 'two', 'three']
x = 'blah blah VAR1 blah blah VAR2 blah blah'
#For every rndvar item, replace VAR+it's pos with the current rndVar value
for i in range(len(rndvar)):
x = x.replace("VAR"+str(i+1),rndvar[i])
答案 3 :(得分:0)
你可以试试这个
for i in range(1,3):
x.replace ("VAR{}".format(i), rndvar[i])