比较并替换字符串中的项目

时间:2015-10-31 11:59:01

标签: python dictionary replace

我正在寻找帮助解决一个令我难过的问题。我有几行看起来像这样

line = '{2}*{3}^2'

大括号中的数字在字典中有一个映射,字典看起来像这样

factorseq_dict = [('2', 'NAME1'), ('3', 'NAME2')]

我正在寻找的是一个脚本,它将读取每个键(括号中的数字),并在字典中查找相应的值。然后,该值将用于创建新的mylist,同时保持原始行中的其他所有内容不变。所以我的新内容将更改为换行符如下。

line = '{2}*{3}^2'
newline = '{NAME1}*{NAME2}^2'

我已经创建了字典但是真的在与其余的逻辑进行斗争,因为我无法将大括号中的项与正常数字分开,所以很抱歉我无法提供任何代码示例。 / p>

我最接近的是得到我的物品,但在那之后我感到难过

line='{2}*{3}^2'
elements = re.split('({[^}]*})', line)

由于

1 个答案:

答案 0 :(得分:3)

您可以在re.sub函数的替换部分内传递匿名函数。

>>> import re
>>> line = '{2}*{3}^2'
>>> factorseq_dict = [('2', 'NAME1'), ('3', 'NAME2')]
>>> dict_ = dict(factorseq_dict)
>>> re.sub(r'\{(\d+)\}', lambda m: '{' + dict_[m.group(1)] + '}', line)
'{NAME1}*{NAME2}^2'

在这种情况下对re.sub函数的一点解释 -

dict_ = {'3': 'NAME2', '2': 'NAME1'}
  

模式r'{(\ d +)}'将提取'2'或'3'并传递给lambda和   此匹配对象将充当字典键以从中返回值   字典dict_例如dict _ ['2']返回'NAME1'(添加大括号返回{NAME1}等),将在字符串中使用它来替换{​​2}或{3}。毕竟我们得到'{NAME1} * {NAME2} ^ 2'