简体   繁体   English

Python 在字符串中查找模式并将其替换为列表中的其他模式字符串

[英]Python find pattern in a string and replace it with other patterned strings in a list

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']

There is one string 'str1' and one list 'list1'有一个字符串 'str1' 和一个列表 'list1'

I want to change the substring in str1 'unX:0' -> 'unX:N'我想更改 str1 'unX:0' -> 'unX:N' 中的 substring

For example, un1:0 -> un1:21, un2:0 -> un2:32....例如,un1:0 -> un1:21, un2:0 -> un2:32....

So the final output has to be所以最后的 output 必须是

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'

I think using regex will be a simple solution but I can't figure it out我认为使用正则表达式将是一个简单的解决方案,但我无法弄清楚

Use re.sub :使用re.sub

d = {re.sub(":\d+", ":0", i): i for i in list1}
keys = "|".join(d)
re.sub(keys, lambda x: d[x.group(0)], str1)

Output: Output:

'(((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'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM