2015-10-03 6 views
1

enter image description here Я пытаюсь соответствовать тексту: details/1234/Python RegEx не работает - Django

с использованием регулярных выражений: r'^details/(?P<article_id>[0-9]+)/$'

Где article_id передается выражение в качестве параметра. Это не возвращает никаких совпадений на Pythex и (очевидно) Django.

Я также попытался:

r'^details/(?P<details>\w+)/$', но это ничего не возвращает либо. Я потерялся. Может ли кто-нибудь помочь?

Например. строка: localhost:8080/details/1234/

+1

Можете ли вы привести пример, содержащий «детали/1234», которые вы используете против своего регулярного выражения. – idjaw

+0

Обновленный вопрос с примером строки – nikjohn

+0

Этот шаблон правильный и отлично подходит для URL-адреса localhost: 8080/details/1234/' –

ответ

0

Почему бы вам не использовать urlparse, чтобы помочь вам больше?

from urlparse import urlparse 

d = urlparse('http://localhost:8080/details/1234') 

выход:

ParseResult(scheme='http', netloc='localhost:8080', path='/details/1234', params='', query='', fragment='') 

Получение пути:

>>> d.path 
'/details/1234' 
>>> 

Если вы хотите использовать регулярное выражение после извлечения пути, вы можете использовать регулярное выражение с небольшой модификацией:

Я добавил /?, который будет искать '/' или no '/'.

^/?details/(?P<article_id>[0-9]+)$

pythex извлеченный что, как:

article_id 1234

+0

Я добавил скриншот от Pythex - не могли бы вы сказать мне, что я здесь делаю что-то не так? – nikjohn

+0

Да. Избавьтесь от «^». «^» Означает начать с начала строки. Я удалил это из вашего регулярного выражения, и это сработало. – idjaw

+0

Если вы используете urlparse, а затем примените свое регулярное выражение, он будет работать. На самом деле, небольшая модификация вашего регулярного выражения также поможет вам. Я уточню свой ответ. – idjaw

0

попробовать это;

/Детали \/(? P [0-9] +)/$/

Я удалил ^ символ в начале. Поскольку этот символ (так называемый carat) пытается найти шаблон "from the start of the line", и ваш шаблон details/... не начинается в начале строки!

Я также удалил r (Python’s raw string notation), а затем я избежал / характера, чтобы быть последовательными :) Pyhex scr

+0

Это, безусловно, работает над Pythex. Не на Django, хотя - я опубликовал версию вопроса Django здесь: http://stackoverflow.com/q/32916267/1409180 Если вы хорошо разбираетесь в Django, не могли бы вы увидеть, можете ли вы мне помочь? – nikjohn

+0

Ммм, я плохо разбираюсь в Django, но я ищу ваш вопрос :) Вы удалили «^»?, Похоже, это может быть причиной проблемы! – mayo

0

Здесь вы пытаетесь пройти «Джанго стиль» URL с каратным ^ в самом начале. Django знает, что все ваши URL-адреса в urls.py равны родственникам и должны начинаться с 127.0.0.1:8000 или localhost: 8080 или независимо от того, что вы установили при запуске сервера запуска или в вашем settings.py. Pythex этого не знает, поэтому он пытается найти любые совпадения, где absolute Путь начинается с «/ details/...» и, конечно же, терпит неудачу. Следовательно, удаление карат с начала вашего регулярного выражения должно сделать трюк.

Однако, как уже упоминал Даниэль Роземан, это должно хорошо работать в джанго.

Смежные вопросы