我正在寻找帮助解决一个令我难过的问题。我有几行看起来像这样
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)
由于
答案 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'