2014-11-29 6 views
3

Я тестирую это в IPython. Переменная t создается из текста в словаре и возвращает:Python regex findall работает, но совпадение не

u'http://www.amazon.com/dp/B003T0G9GM/ref=wl_it_dp_v_nS_ttl/177-5611794-0982247?_encoding=UTF8&colid=SBGZJRGMR8TA&coliid=I205LCXDIRSLL3' 

, используя этот код:

r = r'amazon\.com/dp/(\w{10})' 
m = re.findall(r,t) 

спичек правильно и m возвращает [u'B003T0G9GM']

Используя этот код,

p = re.compile(r) 
m = p.match(t) 

m возвращается None

Это кажется правильным для меня после прочтения этой документации. https://docs.python.org/2/howto/regex.html#grouping

Я также протестировали здесь, чтобы проверить регулярное выражение, прежде чем пытаться это в IPython http://regex101.com/r/gG8eQ2/1

Что мне не хватает?

+4

'match' соответствует началу строки, вам, вероятно, потребуется' search'. См. [В чем разница между re.search и re.match? Python?] (Http://stackoverflow.com/questions/180986/what-is-the-difference-between-pythons-re-search-and-re- совпадение). – alecxe

ответ

4

Должно быть использовано search, не соответствует. Это то, что вам нужно:

p = re.compile(r) 
m = p.search(t) 
if m: print(m.group(1)) # gives: B003T0G9GM 

Матч проверяет только начало строки. Поиск проходит целую строку.

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