Учитывая строковое преобразование, выраженное как подстановка регулярного выражения, есть ли удобный способ отменить это преобразование, желательно в python?reverse a regexp substitution
Например, если преобразование
def f(x): return re.sub('foo((:?bar)?)', r'\1', x)
который превращает 'foobar'
в 'bar'
и 'foo'
в пустую строку, я хотел бы получить
def g(x): return re.sub('((:?bar)?)', r'foo\1', x)
, который делает обратное, в том смысле, что
f(g(x)) == x
Очевидно, что не все регулярные выражения являются отображением 1: 1, но мое желаемое за действительное состоит в том, что все они могут быть отменены в смысле получения одного возможного входного значения g(x)
, которое даст заданный результат x
из первоначальной подстановки.
Зачем мне это нужно? Я хотел бы генерировать URL-адреса для произвольных путей файловой системы на основе разбора директив AliasMatch
в конфигурационном файле Apache.
+1 для очень интересной проблемы, но я сомневаюсь, что есть приемлемое решение, которое даже отдаленно надежно. – delnan