【问题标题】:Compare and replace items in a string比较和替换字符串中的项目
【发布时间】:2016-01-31 18:46:12
【问题描述】:

我正在为一个让我难过的问题寻求帮助。我有几行看起来像这样

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

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

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

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

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

我已经创建了字典,但在处理其余逻辑方面确实很吃力,因为我无法将大括号中的项目与正常数字分开,所以很抱歉我无法提供任何代码示例。

我得到的最接近的就是拿到我的物品,但在那之后我被难住了

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

谢谢

【问题讨论】:

    标签: python dictionary replace


    【解决方案1】:

    您可以在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'}
    

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

    【讨论】:

    • 谢谢阿维纳什。工作一种享受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2021-12-20
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多