2014-11-29 4 views
3

저는 이것을 IPython에서 테스트하고 있습니다. 변수 t는 사전에 텍스트에서 설정하고 반환되는 :Python 정규식 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'가 필요할 것입니다. See [파이썬의 re.search와 re.match의 차이점은 무엇입니까?] (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 

일치는 문자열의 시작 부분 만 검사합니다. 검색은 전체 문자열을 검색합니다.

관련 문제