动态参数核心
list_01 = ['code:H;', 'number:h;', 'separator:*;', 'number:b;']
my_name = '{}{}{}{}'.format(*list_01)
#此时list_01中的元素会依次传入到{}
print(my_name) # 输出结果
业务应用
-
原始字符串
old_str = 'Hh*b*tw*t1*t2'
-
替换规则
rules = {'code': ['H'], 'number': ['h', 'b', 'tw', 't1', 't2'], 'separator': ['*', '(', ')', '/', '+', '~']}
-
预期结果
new_str = 'code:H;number:h;separator:*;number:b;separator:*;number:tw;separator:*;number:t1;separator:*;number:t2'
-
业务实现
def str_replace(old_str:str, rules: dict): '''字符替换''' new_str = old_str idx_values = {} for key, old_values in rules.items(): for value in old_values: if value in new_str: idxs = find_all(value, old_str) for idx in idxs: idx_values[idx] = '{}:{};'.format(key, value) new_str = new_str.replace(value, '{}') values = [] keys = list(idx_values.keys()) keys.sort() for idx in keys: values.append(idx_values[idx]) new_str = new_str.format(*values).rstrip(';') return new_str
总结
- 如果直接使用
str.replace
方法,则替换后number中的b继续参与替换,与预期效果不符。