我想将字典用作查找和替换模式,该模式设置为将键和值用作字符串的其他字典。
我有两个字典。第一个是带有元组的有序字典(collections.OrderedDict),这些元组是上述查找和替换模式。
这本词典的片段是这样的:
dict1 =
{
('e0', 'i0'),
('o0', 'a0'),
('t sj a0$', 'ts a0'),
('tj sj a0$', 'ts a'),
('([bvgdzklmnprstfh])j a0', '\\1j i0'),
('([^s])j a0$', '\\1j i0')
}
如您所见,其中一些模式只是字符串,其中一些包含RegEx特殊字符。该dict必须排序,因为它的许多模式都必须按特定顺序应用。据我所知,标准字典是“随机地”执行的。
第二个看起来像这样:
dict2 =
{
'обнёсшим': 'o0 b nj o1 s sh i0 m',
'колыхалось': 'k o0 l y0 h a1 l o0 sj',
'непроизводительностях': 'nj e0 p r o0 i0 z v o0 dj i1 tj e0 lj n o0 s tj a0 h',
'цукаемою': 'ts u0 k a1 j e0 m o0 j u0',
'соревнующееся': 's o0 rj e0 v n u1 j u0 sch e0 j e0 sj a0',
'сорганизовано': 's o0 r g a0 nj i0 z o1 v a0 n o0'
}
我的目标是遍历第一个字典(dict1)并检查是否在第二个字典(dict2)值中找到任何查找模式(每个元组的第一个元素)。如果是,我希望将它们中的每一个都替换为替换模式(每个元组的第二个元素)。
我有这个脚本,几乎可以完成工作。如果我不使用RegEx特殊字符,它将起作用。它不适用于$,[],[^],\ 1和许多其他语言(这很奇怪,因为我已经在Python3控制台中尝试过一些字符串的模式)。
for find, replace in dict1.items():
for g, p in dict2.items():
if find in p:
dict2[g] = re.sub(find, replace, dict2[g])
预期结果是使这些RegEx模式正常工作。
答案 0 :(得分:1)
此行if find in p:
中的代码存在问题。
当您使用RegEx特殊语法(例如a0$
的if语句永远不会成为True
时,您可以使用regex编译/搜索进行此检查,而不是使用in
成员资格测试操作,或一起删除if
语句。