2017-02-09 6 views
0

문자열이 abc. 인 경우 두 개의 그룹, 즉 abc.으로 나누는 것이 좋습니다. 사실, 나는 단지 . 이전의 그룹에만 관심이있다.re.findall이 가져 오는 동안 re.search가 올바른 그룹을 얻지 못하는 이유는 무엇입니까?

>>> import re 
>>> text = 'abc.' 
>>> re.search('^(\S+)\.$', text).group(0) 
'abc.' 
>>> re.findall('^(\S+)\.$', text) 
['abc'] 

왜 re.search는 re.findall가 점점 동안 올바른 그룹을 받고되지 않는 이유는 무엇입니까?

입력이 abc.def. 또 다른 예는 예상 출력 최종 fullstop을 분리하고 abc.def.를 얻을 수있다. 그래서 re.findall는 원하는대로 점점 :

>>> re.findall('^(\S+)\.$', text) 
['abc.def'] 

그러나 re.search 덩어리 첫 번째 그룹에 최종 fullstop합니다.

>>> re.search('^(\S+)\.$', text).group(0) 
'abc.def.' 

그것은 re.search('^(\S+)\.$', text).group(0)abc.def를 반환 할 수 있습니까? 설정할 플래그가 있습니까?

+2

그룹 번호는 1부터 시작합니다. – user2357112

답변

2

잘못된 그룹을 요청하고 있습니다. 그룹 0은 점을 포함하는 전체 일치입니다. 그룹 1은 경기 내 첫 번째 캡처 그룹입니다. 이 모든 것은 match 개체에 대한 문서에서 설명되며 re.search이 반환됩니다. 0 기반의 것을 절대적으로 필요로한다면 re.search(...).groups()[0]을 사용하십시오.

2

그룹 번호는 1부터 시작하므로 group(1)이 필요합니다. group(0)은 전체 일치 텍스트입니다.