2012-12-03 8 views
0

python yo match string을 사용하려고합니다.Python 일치는 첫 번째 그룹 만 캡처합니다.

>> self._regexs = re.compile("(?P<g0>.*AMD$)|(?P<g1>.*AMD$)|(?P<g2>.*AMD$)|(?P<g3>.*)", re.DEBUG) 
>> m = self._regexs.match("AMD") 
>> print m.groups() 
('AMD', None, None, None) 

은 내가 m.groups()를 표시 한 것으로 예상 한 것 :

>> print m.groups() 
('AMD', 'AMD', 'AMD', None) 

하지만 분명히 내가 뭔가 잘못하고 있어요. 이 솔루션이 작동하지 않는 이유와이를 변경하는 방법을 알고 싶습니다. 그래서 제가 찾고있는 결과를 얻습니다.

+0

? 나에게 복잡하게 보입니다. –

+0

파이썬에서 nltk (RegexpTagger)를 사용하고 있습니다. 그러나 한 단어는 하나의 태그로 태그 할 수 있습니다. 나는 그것을 바꾸고 싶다. – hoangvu68

+0

아마도 당신의 질문을 업데이트 할 가치가 있을지도 모르겠다. 아마도 ntlk와 "최종 목표"가 지금 말한 방식이 아니라 ... –

답변

3

정규 표현식은 첫 번째 일치 항목을 수락한다는 점에서 greedy을 작동합니다. 첫 번째 캡처 그룹은 사용자의 특정 입력과 함께 사용됩니다. 대체 표현식 (|으로 신호 처리됨)은 샘플 문자열이 만족하는 첫 번째 대안과 항상 일치합니다. 당신이이 | 년대 사이에 각기 다른 여러 하위 정규 표현식을 통해 역 추적 필요로 할 수없는 정규 표현식의 switchcase 유형을 만들려고 노력하는 것처럼

는 것 같습니다. 달성하려는 결과는 하나의 정규 표현식으로는 불가능합니다.

은 참조 :

정확히 당신이 뭘 하려는지
관련 문제