Как заменить одну косую черту '/' в строке, исключая символы косой черты в шаблоне ': //' - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь найти способ заменить одиночный символ слеша '/' из строки, кроме слешей в 'https://' или нет в' http://'

a="https://example.com/example/page/"

Я хотел бы заменить '/'например, с '%', но без символов косой черты в 'https://' или не в' http://', так что в конце я получаю следующий результат:

a="https://example.com%example%page%"

Я пытался

re.sub('(?<!:\/)\/', '%', a)

в python, но это не правильно.

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете использовать

re.sub(r'(https?|ftps?)://|/', lambda x: x.group(0) if x.group(1) else '%', s)

Подробности

  • (https?|ftps?):// - совпадения и захваты в группу 1 http / https / ftp / ftps (добавьте больше, если необходимо), а затем соответствует ://
  • | - или
  • / - соответствует / в любом другом контексте

Если сопоставляется группа 1, все совпадения вставляются обратно, в противном случае / заменяется на %.

См. Демонстрационную версию Python :

import re
s = 'https://example.com/example/page/'
print(re.sub(r'(https?|ftps?)://|/', lambda x: x.group(0) if x.group(1) else '%', s))
# => https://example.com%example%page%
...