Python3文本替换优化

时间:2017-12-12 22:52:14

标签: python python-3.x

我的问题是如何优化我目前正在进行文本替换的方式。

我正在构建一个脚本,用于显示内部变量的问题,并在运行脚本时替换为随机实际值。

我的脚本目前执行类似于以下内容(使用随机库):

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]等替换

我的问题(字符串)将包含表示不同内容(但所有字符串)的多个列表中的元素。

感谢所有回复,我很感激!

4 个答案:

答案 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])