【发布时间】:2021-12-04 03:24:09
【问题描述】:
我有这个函数可以用它的正则表达式替换字典值中的命名规则,比如#digit#:[0-9)
例如,调用这个函数:
def expand_re(pat_dict:{str:str}):
pat_list = list(pat_dict.items())
for key, rule in pat_dict.items():
expression = re.compile(r'#\w+#')
pat_dict[key] = re.sub(expression, f"(?:{pat_list[0][1]})", rule)
return pat_dict
在这本词典上:
pd = dict(digit = r'[0-9]', integer = r'[+-]?#digit##digit#*')
会产生:
{'digit': '[0-9]', 'integer': '[+-]?(?:[0-9])(?:[0-9])*'}
而且它工作得很好。但是,如果字典开始使用前一个值的命名规则,它就不起作用。所以在字典上调用 expand_re:
pd = dict(a='correct',b='#a#',c='#b#',d='#c#',e='#d#',f='#e#',g='#f#')
我的函数产生:
{'a': 'correct',
'b': '(?:correct)',
'c': '(?:correct)',
'd': '(?:correct)',
'e': '(?:correct)',
'f': '(?:correct)',
'g': '(?:correct)'
}
当我希望它产生时:
{'a': 'correct',
'b': '(?:correct)',
'c': '(?:(?:correct))',
'd': '(?:(?:(?:correct)))',
'e': '(?:(?:(?:(?:correct))))',
'f': '(?:(?:(?:(?:(?:correct)))))',
'g': '(?:(?:(?:(?:(?:(?:correct))))))'
}
我怎么能做到这一点?我尝试使用字典的 .update() 方法,但无济于事。
【问题讨论】:
标签: python regex dictionary