2016-07-06 2 views
1

이 정규식은 ('c',)() 인 이유는 무엇입니까? 당신이 플러스 괄호 후, 한 번에 여러 번 한 문자와 일치하는 둘 때 나는Python 정규 표현 그룹

>>> import re 
>>> m = re.match("([abc])+", "abc") 
>>> print m.groups() 
('c',) 
>>> m.groups(0) 
('c',) 
>>> m = re.match("[abc]+", "abc") 
>>> m.groups() 
() 
>>> m.groups(0) 
() 
+1

'm.group() = 'abc'' (m.group은 m.groups가 아님) –

답변

1

에 대한 groups

반환 그러나 많은 그룹 패턴에 최대 1 경기의 모든 하위 그룹을 포함하는 튜플. 기본 인수는 일치 항목에 참여하지 않은 그룹에 사용됩니다. 기본값은 없음입니다. 첫 번째 정규식 ([abc])+에서

, 그것은 문자 a 또는 b 또는 c 일치되지만 마지막 경기를 저장합니다

([abc])+ 
<-----> 
Matches a or b or c 
Observe carefully. Capturing groups are surrounding only the character class 
So, only one character from the matched character class can be stored in capturing group. 

당신이 캡처 그룹 사용 문자열 abc을 캡처하려면

([abc]+) 

위 문자열은 a 또는 b 또는 c으로 캡처 그룹에 저장합니다.

두 번째 정규식 [abc]+에는 캡처 그룹이 없으므로 빈 결과가 표시됩니다.

+0

하지만''[[abc] ((abc)) ([abc])' '([abc]) +'는 마지막으로 일치하는 것을 저장합니다. 얼마나 이상한가! –

+0

@ J.Joe 그것의 이상한. 첫번째 것은 명백하다. .i 무슨 일이 일어날지를 설명하는 대답을 업데이트했다. 도움이되는지 안다. 아직도 문제가 있는지 물어 볼 수있다. – rock321987

+0

@ J.Joe' ([abc]) ([abc]) ([abc])'는 각 매치를 다른 캡쳐 그룹에 저장합니다. 그러나 매번 ('abc) +'는 덮어 쓰여질 것입니다 .. 그래서 캡쳐 그룹에 오직 하나의 매치 만 저장됩니다 – rock321987

0

"([abc])+" === "([abc])([abc])([abc])..."을 생각했다. 그래서 그것은 이전에 덮어 쓸 때마다 b, c와 매치합니다. + inside ([abc] +)를 하나 이상 일치 시키십시오. 문서에서