Как заменить параметризованную строку?

Мой вариант использования - вернуть 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.

Вы смотрели docs.python.org/3/library/re.html?

jonrsharpe 15.12.2020 16:01

Этот вопрос помечен как Python, но я вижу только код Javascript... Какой у вас вопрос по Python?

Tomerikoo 05.04.2021 16:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это сложный способ замены начала строк. Если все дело в результате, я бы сделал так

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(/(.*))?$. Есть ли способ обработать этот формат?

Awesome 15.12.2020 16:50

Смотрите дополнения.

Mace 15.12.2020 17:13

Другие вопросы по теме