인덱스 관련 질문있습니다

정규식 [a-z]+은 소문자로 이루어진 단어를 뜻하므로 5 python 문자열에서 python과 매치될 것이다. 따라서 python 문자열의 시작 인덱스(m.start())는 2이고 마지막 인덱스(m.end())는 8이므로 10이 출력된다.

import re

p = re.compile('[a-z]+')
m = p.search("5 python")
print(m.start() + m.end())  # 10 출력

-점프 투 파이썬 중 발췌

m.start() 가 2인건 이해가 되는데
m.end()가 8이 아니라 저는 7이라고 생각되는데 왜 8인가요 ?

'5 python'
'01234567'
문자열 시작인 p가 2 인것처럼
문자열 끝인 n은 7번 아닌가요?

kakajung 670

M 2020년 8월 12일 6:14 오후

목록으로
2개의 답변이 있습니다. 1 / 1 Page

이 부분에 대한 질문이 많습니다.

a = "5 python" 이라는 문자열에서 a[7]이 'n' 에 해당되기 때문에 m.end() 가 7이 될것이라고 생각하지만 다음을 보시면 start와 end에 해당하는 숫자로 슬라이싱을 할 경우 'pytho' 이라는 문자열이 리턴됩니다.

>>> a = "5 python"
>>> a[2:7]
'pytho'

'python' 이라는 온전한 문자열이 리턴되려면

>>> a[2:8]
'python'

7이 아닌 8을 사용해야 합니다.

파이썬 re 모듈의 search 에 의해 생성된 match 객체의 start와 end 함수는 매칭된 문자열의 개별 인덱싱이라기 보다는 start와 end로 슬라이싱 했을때 얻을 수 있는 인덱싱 값을 의미합니다.

"점프 투 파이썬"에도 설명을 조금 보강해야 겠습니다.
좋은 질문 감사합니다.

운영자

2020년 8월 12일 6:29 오후

저는 슬라이싱을 start ~ end-1 까지라고 외웠습니다!!

singleton

2020년 8월 12일 8:53 오후