Python如何用正则匹配unX:0子串并按列表对应值替换
实现方案
先将list1转换为映射字典,再用正则匹配所有unX:0格式的子串,通过回调函数查找字典完成替换即可。
完整代码
import re str1 = '(((un5:0,(un7:0,un8:0):15):9,(un4:0,un10:0):10):5,((un6:0,un1:0):10,(un3:0,un9:0,un2:0):14):12):7):0' list1 = ['un1:21', 'un2:32', 'un3:43', 'un4:3', 'un5:2', 'un6:21', 'un7:3', 'un8:4', 'un9:3', 'un10:2'] # 构造unX到对应完整值的映射字典 replace_map = {} for item in list1: un_key = item.split(':')[0] replace_map[un_key] = item # 正则匹配unX:0格式子串,调用回调替换 new_str1 = re.sub(r'(un\d+):0', lambda match: replace_map[match.group(1)], str1) print(new_str1)
运行结果
输出完全符合需求:
'(((un5:2,(un7:3,un8:4):15):9,(un4:3,un10:2):10):5,((un6:21,un1:21):10,(un3:43,un9:3,un2:32):14):12):7):0'
逻辑说明
- 转换
list1为字典是为了实现O(1)效率的键值查找,避免每次匹配都遍历列表 - 正则
r'(un\d+):0'会匹配所有un+数字+:0格式的子串,括号将unX部分捕获为分组 re.sub的回调函数会在每次匹配到目标子串时执行,取出捕获的unX分组,查字典返回对应替换值
内容的提问来源于stack exchange,提问作者SG Kwon
相关产品推荐
相关产品推荐

