2014-06-13 2 views
0

저는 현재 mexico 1 - 2와 같은 구문을 정규식을 사용하여 일치 시키려고합니다. regexpal을 사용하여 정규식을 테스트 할 때 일치하지만, re를 사용하는 Python에서는 일치하지 않습니다.Regex Python이 일치하지 않지만 regexpal에서 수행

regex = '(mexico[\s]*\d[\s]*[-][\s]*\d[\s]*cameroon)|(mexico[\s]*\d[\s]*cameroon[\s]\d)|(mexico[\s]*\d[\s]*[-][\s]*cameroon[\s]*\d)|(cameroon[\s]*\d[\s]*[-][\s]*\d[\s]*mexico)|(cameroon[\s]*\d[\s]*mexico[\s]\d)|(cameroon[\s]*\d[\s]*[-][\s]*mexico[\s]*\d)' 

내 시험 구 :

내 정규식은

testphrase = RT @remitouja: @TheJUMPsociety cameroon 1 - 1 mexico #winecup #WorldCup" 

내가 성공적으로 regexpalbut하지 파이썬에서 일치하지만, testphrase하지 않습니다. 그러나 모두 다음 경기 : cameroon 1 - 1 mexico #winecup #WorldCup

당신은 re.search를 사용할 필요가

+0

코드를 표시하십시오. 나는 당신이're.search'를 사용해야 할 때 당신이're.match'를 사용하고 있다고 의심합니다. – Jerry

+0

원시 문자열을 사용해야합니다 :'regex = r '(mexico ...') –

+0

정확합니다, re.match (regex, testtweet)가없는 경우 : \t \t print "true" – KOM

답변

4

테스트

if re.match(regex, testtweet) is not None: 
     print "Is true" 

사용.

당신은 일치하지 않는 기본 앵커 문자열의 시작에서 당신의 정규식에 의해 re.match 때문에 당신이 가지고 정규식 인 것처럼 ^(mexico.... (등) :

if re.search(regex, testtweet) is not None: 
    print "Is true" 

둘째, 좋은 습관은 원료에의하여 파이썬 정규식 내 전면에 r 퍼팅을 문자열 :

regex = r'(mexico[\s]*\d[\s]*[-][\s]*\d[\s]*cameroon)|(mexico[\s]*\d[\s]*cameroon[\s]\d)|(mexico[\s]*\d[\s]*[-][\s]*cameroon[\s]*\d)|(cameroon[\s]*\d[\s]*[-][\s]*\d[\s]*mexico)|(cameroon[\s]*\d[\s]*mexico[\s]\d)|(cameroon[\s]*\d[\s]*[-][\s]*mexico[\s]*\d)' 

다음 혼자 인 경우, 대괄호, 또는 다른 문자 사이 -를 넣을 필요가 없습니다. 많은 그룹을 보유하고있는 사람이 많으므로 캡처 그룹을 제거하면 충분하다고 생각합니다.

regex = r'mexico\s*\d\s*-\s*\d\s*cameroon|mexico\s*\d\s*cameroon\s*\d|mexico\s*\d\s*-\s*cameroon\s*\d|cameroon\s*\d\s*-\s*\d\s*mexico|cameroon\s*\d\s*mexico\s\d|cameroon\s*\d\s*-\s*mexico\s*\d' 
+0

Perfect 그것을 고정, 지금 조금 바보 느낌! – KOM

관련 문제