LINUX.ORG.RU

Двустороннее преобразование строки по единожды объявленному правилу

 ,


0

1

Хочу писать текстовый конфиг с набором правилами типа «если строка — АБВ, то замени В на Г, а если строка — результат предыдущей замены, т. е. АБГ, то верни всё обратно к АБВ». См. пример.

import re

# rule, reverse_rule = read_rule_from_file() 
rule = r'^(.*)bar', r'\1baz'
reverse_rule = r'^(.*)baz', r'\1bar'

source = 'qwerty/bar'
result = re.sub(*rule, source)
restored = re.sub(*reverse_rule, result)

print(source, result, restored)

Бесит необходимость прописывать преобразование в обе стороны.

Есть ли что готовое, не обязательно регулярные выражения?


Про рекурсивный спуск прочитай

tz4678 ★★
()

Бесит необходимость прописывать преобразование в обе стороны.

А конструировать их как

s1 = 'bar'
s2 = 'baz'
# s, s2 = read...
rule = '^(.*)'+s1, r'\1' + s2
reverse_rule = '^(.*)'+s2, r'\1' + s1

не то?

monk ★★★★★
()

Бесит необходимость прописывать преобразование в обе стороны.

Эммм.. не всякая регулярка является обратимой (биективным отображением). Тут надо какую-то сложную математику применять для преобразования, если говорить об общем случае, например для каких-нибудь префиксных кодов

SZT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.