我有一个这样的清单:
[item1(130.35),item2(140.10),item2(140.25),item2(130.05)]
我想通过检查其编号的第一个数字来替换每个项目与其他列表不同的内容。 例如,所有130个被替换为m1,所有140个被替换为m2:
[replaceditem1,replaceditem2,replaceditem2,replaceditem1]
答案 0 :(得分:2)
这个想法是:
item\d+\((\d+)\.\d+\)
适用于此输入集演示:
>>> l = ["item1(130.35)", "item2(140.10)", "item2(140.25)", "item2(130.05)"]
>>> import re
>>> pattern = re.compile(r"item\d+\((\d+)\.\d+\)")
>>> replacements = {
... '130': 'replaceditem1',
... '140': 'replaceditem2'
... }
>>> result = []
>>> for item in l:
... match = pattern.match(item)
... if match:
... result.append(replacements.get(match.group(1), item))
... else:
... result.append(item)
>>> result
['replaceditem1', 'replaceditem2', 'replaceditem2', 'replaceditem1']
让我们回顾一下正则表达式:
\d+
匹配一个或多个连续数字\(
和\)
会匹配文字的开括号和右括号 - 需要进行转义,因为它们具有特殊含义\.
会匹配文字点(\d+)
是捕获组,可捕获一个或多个连续数字