Извлечение страницы и номера страницы с помощью регулярного выражения Python

#python #regex

Вопрос:

Я хочу извлечь страницу и номер страницы из URL с помощью регулярного выражения. Существует несколько вариантов номера страницы:

 fghghdsfs/page4
fghghdsfs/page-4
sfgsfgsfg/page=4
hteheth/page-4/
dhdghgd/page=4/
dghdghdh/page/4/
dghdghdh/page/4
fghghdsfs?page4
dhdghd?page-4
dghdg?page-4/
eyeyt?page=4
etyetyet?page=4/
nvnndgnd?page/4/
dghdghdh/page/4
 

Номер страницы должен содержать от 1 до 3 цифр.

Я пробовал использовать это регулярное выражение, но у меня проблема с идентификацией / :

 (=|?|/)(page)(_|-|=|d{1,3}|/)
 

Комментарии:

1. Какая проблема у вас с идентификацией / ?

Ответ №1:

С регулярным выражением, которое у вас есть, есть две проблемы:

  1. d{1,3} находится внутри круглых скобок. Вы говорите: page за которым следует либо разделитель, либо номер страницы. Поместите его после круглых скобок и сделайте его группой захвата, чтобы вы могли извлечь его позже.
  2. Группа с разделителями обязательна, поэтому page4 не соответствует. Поместите a ? после группы.

Исправление этих:

(=|?|/)(page)(_|-|=|/)?(d{1,3})

Посмотрите это в действии на regex101.

Ответ №2:

Вы можете использовать это регулярное выражение:

 [=?/]page[_=/-]?(d{1,3})
 

Демонстрация регулярных выражений

Сведения о регулярных выражениях:

  • [=?/] : Совпадение = или ? или /
  • page : Сопоставить строку page
  • [_=/-]? : Необязательно сопоставлять _ или = или / или -
  • (d{1,3}) : Сопоставьте от 1 до 3 цифр

Комментарии:

1. Я удалил группу захвата, и тогда у нас в основном одни и те же ответы. Я бы выбрал этот ответ.