Django URLs регулярное выражение - PullRequest
0 голосов
/ 26 сентября 2011

Мне нужна ваша помощь для проверки ссылки на регулярное выражение в Python.Вот как должна выглядеть ссылка:

http://www.example.com?utm_source=something&utm_medium=somethingelse

И я попробовал что-то вроде:

r'^\?utm_source\=(?P<utm_source>[-\w]+)&utm_medium\=(?P<utm_medium>[-\w]+)/$'

Но это не работает.Не могли бы вы мне помочь?Какие (другие) символы должны быть экранированы?

Ответы [ 2 ]

4 голосов
/ 26 сентября 2011

Это классическая XY проблема .

Ответ Тима , дает решение, о котором вы просили.

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

Взгляните на urlparse ...

>>> a_url = 'http://www.example.com?utm_source=something&utm_medium=somethingelse'
>>> parser = urlparse.urlparse(a_url)
>>> qs = urlparse.parse_qs(parser.query)
>>> 'utm_medium' in qs
True
>>> len(qs['utm_medium']) == 1
True
>>> qs['utm_medium'][0].isalpha()
True
>>> 'utm_source' in qs
True
>>> len(qs['utm_source']) == 1
True
>>> qs['utm_source'][0].isalpha()
True
>>> 'utm_zone' in qs
False
1 голос
/ 26 сентября 2011

Вам не нужны все эти побеги:

r'^\?utm_source=(?P<utm_source>[-\w]+)&utm_medium=(?P<utm_medium>[-\w]+)/$'

Тогда ваше регулярное выражение соответствует только полной строке;он не найдет под-совпадение, так что, возможно, вам нужно удалить якоря?

r'\?utm_source=(?P<utm_source>[-\w]+)&utm_medium=(?P<utm_medium>[-\w]+)/'

Наконец, косая черта в конце обязательна в регулярном выражении, но отсутствует в вашем примере строки.Так как насчет

r'\?utm_source=(?P<utm_source>[-\w]+)&utm_medium=(?P<utm_medium>[-\w]+)/?'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...