2012-05-07 2 views
0

패턴의 문자열이 있습니다. {{시작일 | 2005 | 8 | 29}} 이제 2005,8,99를 세 개의 개별 요소로 추출하려고합니다. 그래서 regexp 내가 : re.findall ('([0-9]) +', str) 2005, 8, 29 대신 5,8,9 나를주고있다 검색 방법을 시도했을 때 같은 패턴 사용 re.search ('([0-9]) +', str) .group() 2005 년 첫 번째 요소가 있습니다. 왜이 두 메서드의 출력이 다른가요? 현재 날짜 패턴의 정규식은 언제입니까?정규식 패턴 findall과 다른 이유를주는 검색은 동일한 패턴의 유도문

답변

1

길게만 짧음 : '([0-9]+)'이 아니고 '([0-9])+'이 아닙니다.

세부 정보 : 모든 괄호 쌍이 그룹을 결정합니다. 일치하려는 단일 시도에서 그룹이 여러 번 캡처 된 경우 마지막 캡처 만보고됩니다. 당신이 문자열에 대해이 재 호출 할 때 ([0-9]) 부분은 다음, 다음, 다음, '5''0''0''2' 일치하기 때문에 더 이상 일치하지 전에 특히

은, 그것은, 첫 이동 라운드에 "2005"의 모든 일치 . 그래서 그것은 모두 "2005"과 일치하지만 그 그룹 자체는 그 서브 표현식에 대한 마지막 일치만을보고했습니다 : '5'.

비교해 볼 때 나중에 그룹 방법으로 re.search을 시도했습니다. group 메서드는 에 일치하는 부분 문자열을 전체 정규식, not the first group으로 반환합니다. 따라서 "2005"을 모두 반환했습니다. 대신 차이점을 확인하려면 .group(1)으로 전화 해보십시오.