Мой вариант использования - вернуть uri перенаправления для данного uri.
URI будут следующими:
/books
/books/economic-genious
/books/flight-mechanics
Мое регулярное выражение для соответствия вышеуказанным URI выглядит следующим образом:
/books(/(.*))?$
Мой пункт назначения настроен следующим образом: /ebooks$1
. Таким образом, указанные выше URI будут преобразованы в:
/ebooks
/ebooks/economic-genious
/ebooks/flight-mechanics
Для этого мой существующий код Javascript:
function getMappedURI(uri) {
var exp = new RegExp('/books(/(.*))?$');
var destUri = '/ebooks$1';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}
Не удалось добиться того же в Python.
Этот вопрос помечен как Python, но я вижу только код Javascript... Какой у вас вопрос по Python?
Это сложный способ замены начала строк. Если все дело в результате, я бы сделал так
import re
uri_list = [
'/books',
'/books/economic-genious',
'/books/flight-mechanics',
]
def getMappedURI(uri):
return re.sub(r'^/books', '/ebooks', uri)
for uri in uri_list:
print(getMappedURI(uri))
Результат
/ebooks
/ebooks/economic-genious
/ebooks/flight-mechanics
Если вам нужно использовать исходное регулярное выражение, это должно работать
import re
uri_list = [
'/books/',
'/books/economic-genious',
'/books/flight-mechanics',
]
def getMappedURI(uri):
return re.sub(r'/books(/(.*))?$', r'/ebooks\1', uri)
for uri in uri_list:
print(getMappedURI(uri))
Результат
/ebooks/
/ebooks/economic-genious
/ebooks/flight-mechanics
Обратите внимание, что обратная косая черта была добавлена перед косой чертой в вашем регулярном выражении. Если вы хотите избежать этого, вы должны использовать
re.sub(r'/books(/(.*))?$'.replace('/', r'/'), r'/ebooks\1', uri)
Я должен поддерживать новый код Python и устаревший код javascript для существующих данных. Существующие данные сохраняются в указанном выше формате /books(/(.*))?$
. Есть ли способ обработать этот формат?
Смотрите дополнения.
Вы смотрели docs.python.org/3/library/re.html?