[Python] 문자열 위치 모두 찾기
June 30, 2024
문자열에서 특정 문자열이 있는 위치(Index)를 하나가 아닌, 문자열에 있는 모든 위치를 찾는 방법을 알아보겠습니다.
1. find()를 이용한 방법
text.find(substring)
은 text라는 문자열에서 substring이라는 문자열의 위치를 왼쪽부터 찾고, 가장 먼저 찾은 문자열의 Index를 리턴합니다.
- 찾는 문자열이 없으면
find()
는 -1 리턴 - 아래 예제에서 가장 먼저 찾은 “Python” 문자열은 Index 0의 “Python”이기 때문에
find()
는 0 리턴
text = "Python is easy and Python is fun."
substring = "Python"
start = text.find(substring)
print(f"찾은 위치: {start}")
Output:
찾은 위치: 0
모든 문자열의 위치 찾기
위의 예제는 찾는 문자열이 여러개 있어도 하나의 위치만 리턴합니다. 문자열이 있는 모든 위치를 찾으려면 반복문을 사용하여 반복적으로 찾도록 구현해야 합니다.
text.find(substring, start)
는 text에서 substring 문자열을 start 인덱스부터 찾습니다.
- 아래와 같이 while문으로 반복적으로 모든 문자열의 위치를 찾을 수 있음
- 문자열을 찾았다면, start 인덱스를 찾은 문자열 다음으로 변경하여 다음 문자열을 찾도록 해야 함
find()
는 두개의 문자열을 찾고, 더 없어서 -1을 리턴하면서 반복문 종료
text = "Python is easy and Python is fun."
substring = "Python"
start = -1
while True:
start = text.find(substring, start + 1)
if start == -1:
break
print(f"찾은 위치: {start}")
Output:
찾은 위치: 0
찾은 위치: 19
2. 정규표현식을 이용한 방법
finditer(pattern, string)
은 string에서 pattern에 해당하는 것을 모두 찾고, 결과를 Iterator로 리턴합니다.
- Iterator를 for문으로 반복하여 match 값을 얻을 수 있음
- 각각의 match는 일치하는 문자열 정보를 갖고 있으며,
match.start()
는 문자열의 시작 위치(Index) 리턴 - 참고로,
match.end()
는 찾은 문자열의 마지막 Index를 리턴
import re
text = "Python is easy and Python is fun."
substring = "Python"
for match in re.finditer(substring, text):
print("찾은 위치:", match.start())
Output:
찾은 위치: 0
찾은 위치: 19
3. index()를 이용한 방법
index()
는 find()
와 비슷하지만, 찾는 문자열이 없을 때 -1 대신 ValueError를 발생시킵니다.
index(substring, start)
는 문자열의 start 인덱스부터 substring을 찾고, Index를 리턴- 찾는 문자열이 없으면 ValueError가 발생되며, 이것을 예외처리하여 반복문을 종료되도록 구현
text = "Python is easy and Python is fun."
substring = "Python"
start = -1
try:
while True:
start = text.index(substring, start + 1)
print(f"찾은 위치: {start}")
except ValueError:
pass
Output:
찾은 위치: 0
찾은 위치: 19