2014-02-06 3 views
1

У меня есть регулярное выражение python, которое соответствует методу, всегда возвращает None. Я тестировал сайт pythex, и образец кажется ОК.Регулярное регулярное выражение для Python всегда возвращает None

Pythex example

Но когда я пытаюсь с модулем повторной, результат всегда None:

import re 
a = re.match(re.compile("\.aspx\?.*cp="), 'page.aspx?cpm=549&cp=168') 

Что я делаю неправильно?

ответ

6

re.match() только совпадения на начало строки. Используйте re.search() вместо:

re.search(r"\.aspx\?.*cp=", 'page.aspx?cpm=549&cp=168') 

Демо:

>>> import re 
>>> re.search(r"\.aspx\?.*cp=", 'page.aspx?cpm=549&cp=168') 
<_sre.SRE_Match object at 0x105d7e440> 
>>> re.search(r"\.aspx\?.*cp=", 'page.aspx?cpm=549&cp=168').group(0) 
'.aspx?cpm=549&cp=' 

Обратите внимание, что любые re функции, которые принимают шаблон, принимает строку и будет называть re.compile() для вас (который кэширует результаты компиляции). Вам нужно всего лишь использовать re.compile(), если вы хотите сохранить скомпилированное выражение для повторного использования, в этот момент вы можете позвонить pattern.search() на нем:

pattern = re.compile(r"\.aspx\?.*cp=") 
pattern.search('page.aspx?cpm=549&cp=168') 
+0

Я злюсь сам. =) Я забыл метод поиска. Хорошее наблюдение, я храню шаблон для повторного использования. –

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