字典和字符串

Posted

技术标签:

【中文标题】字典和字符串【英文标题】:dictionaries and strings 【发布时间】:2014-06-07 22:20:26 【问题描述】:

这是我的代码不起作用:

def myfunc(d):
    for name, pat in d.items():
        originalstring = pat
        pattern = '#\w+#'
        pattern_obj = re.compile(pattern)
        replacement_string = '('+d['\\1']+')'
        d[name] = pattern_obj.sub(replacement_string, originalstring)
    return d

我收到一条错误消息:

KeyError: '\\1'

【问题讨论】:

什么不起作用?你有错误吗? @user3527631 您希望它如何工作? '\\1' 不是密钥,所以你会得到一个 KeyError 你只是在编译模式,没有匹配任何东西。可能您必须调用re.find,然后将其结果用作键或类似键。 问题是您正在使用该键执行子操作之前访问字典。该键不被解释为正则表达式的一部分,而只是一个不存在的键。 【参考方案1】:

如果您需要动态替换,可以使用 re.sub 的函数形式。此外,我认为最好将整个事物包装在一个循环中以处理任意深度的替换(在我的示例中,range 取决于 int,而后者又取决于 digit):

import re

def make_patterns(patdict):
    old, new = patdict, 
    while True:
        for name, pat in old.items():
            new[name] = re.sub(r'#(\w+)#',
                lambda m: old[m.group(1)],
                pat)
        if new == old:
            return old
        old, new = new, 


d = dict(
    digit=r'\d',
    integer=r'[=-]?#digit##digit#*',
    range='#integer#-#integer#'
)

print make_patterns(d)

结果

 'integer': '[=-]?\\d\\d*', 'range': '[=-]?\\d\\d*-[=-]?\\d\\d*', 'digit': '\\d'

【讨论】:

以上是关于字典和字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Python 字典序列化为字符串,然后再返回字典?

Python中 json字符串和字典的区别

python字典字符串(json串)字节串之间的转化

iOS 开发中字典和字符串的转换

字典和字符串

python字符串列表和字典的说明