Я хочу использовать словарь в качестве набора шаблонов поиска и замены, который будет применяться к другому словарю с ключами и значениями в виде строк.
У меня есть два словаря. Первый - это упорядоченный словарь (collection.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. Этот дикт должен быть упорядочен, потому что многие из его шаблонов должны применяться в определенном порядке. Стандартный дикт, насколько я знаю, делает это "случайно".
Второй выглядит так:
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'
}
Моя цель - выполнить итерацию по первому dict (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 работать.