안녕하세요.
오늘은 파이썬의 문자열에서 특정 문자 찾는 방법에 대해 포스팅을 하려고 합니다.
find, startswitch, endswitch, index 4종류로 정리를 하였고, 각각 어떤 특징이 있는지 알아보도록 하겠습니다.
1. find
if __name__ == '__main__':
"""
* main 실행
"""
# string 문자열
str = 'abcdefg'
# 특정 문자 'e' 찾기
# find : 전체에서 'e' 찾기
print('* find : 전체에서 \'e\' 찾기')
print(' - 결과 : %s' % str.find('e'))
# find : 인덱스 1 ~ 마지막 사이에서 'e' 찾기
print('* find : 인덱스 1 ~ 마지막 사이에서 \'e\' 찾기')
print(' - 결과 : %s' % str.find('e', 4))
# find : 인덱스 1 ~ 5 사이에서 'e' 찾기
print('* find : 인덱스 1 ~ 5 사이에서 \'e\' 찾기')
print(' - 결과 : %s' % str.find('e', 1, 3))
- 특징 : 일반적인 string 문자열에서 특정 문자를 찾으면 해당 문자열의 인덱스 값을 반환
- 인자값 1 : 찾고자 하는 특정 문자
- 인자값 2 : 찾으려는 대상 문자열에서 시작하는 인덱스 번호 지정.
끝나는 번호를 지정하지 않으면 시작번호부터 마지막 번호의 값까지 찾게 됨.
ex) 'abcdefg' -> 1을 넣으면 1번('a')을 제외한 'bcdefg'부터 찾게 됨
- 인자값 3 : 찾으려는 대상 문자열에서 끝나는 인덱스 번호 지정
ex) 'abcdefg' -> 5를 넣으면 시작 번호부터 5번('e')까지 'bcde' 내에서 찾게 됨
- 반환 : 값이 있는 경우 : 문자열의 시작하는 위치 인덱스 값을 반환
값이 없는 경우 : -1
* 실행 결과
위의 결과처럼 인덱스 값을 넣어서 찾았을 때에는 다른 결과가 나오는 모습입니다.
2. startswitch
if __name__ == '__main__':
"""
* main 실행
"""
# string 문자열
str = 'abcdefg'
# startswith : 전체에서 'ab' 찾기
print('* startswith : 전체에서 \'ab\' 찾기')
print(' - 결과 : %s' % str.startswith('ab'))
# startswith : 인덱스 1 ~ 마지막 사이에서 'ab' 찾기
print('* startswith : 인덱스 1 ~ 마지막 사이에서 \'ab\' 찾기')
print(' - 결과 : %s' % str.startswith('ab', 4))
# startswith : 인덱스 1 ~ 5 사이에서 'ab' 찾기
print('* startswith : 인덱스 1 ~ 5 사이에서 \'ab\' 찾기')
print(' - 결과 : %s' % str.startswith('ab', 1, 3))
- 특징 : 일반적인 string 문자열에서 특정 문자를 찾으면 해당 문자열의 인덱스 값을 반환
- 인자값 1 : 찾고자 하는 특정 문자
- 인자값 2 : 찾으려는 대상 문자열에서 시작하는 인덱스 번호 지정.
끝나는 번호를 지정하지 않으면 시작번호부터 마지막 번호의 값까지 찾게 됨.
ex) 'abcdefg' -> 1을 넣으면 1번('a')을 제외한 'bcdefg'부터 찾게 됨
- 인자값 3 : 찾으려는 대상 문자열에서 끝나는 인덱스 번호 지정
ex) 'abcdefg' -> 5를 넣으면 시작 번호부터 5번('e')까지 'bcde' 내에서 찾게 됨
- 반환 : 값이 있는 경우 : 문자열의 시작하는 위치 인덱스 값을 반환
값이 없는 경우 : -1
* 실행 결과
위의 실행 결과처럼 startswitch는 boolean 값으로 결과를 반환하는 모습입니다.
3. endswitch
if __name__ == '__main__':
"""
* main 실행
"""
# string 문자열
str = 'abcdefg'
# endswith : 전체에서 'fg' 찾기
print('* endswith : 전체에서 \'fg\' 찾기')
print(' - 결과 : %s' % str.endswith('fg'))
# endswith : 인덱스 1 ~ 마지막 사이에서 'fg' 찾기
print('* endswith : 인덱스 1 ~ 마지막 사이에서 \'fg\' 찾기')
print(' - 결과 : %s' % str.endswith('fg', 4))
# endswith : 인덱스 1 ~ 5 사이에서 'fg' 찾기
print('* endswith : 인덱스 1 ~ 5 사이에서 \'fg\' 찾기')
print(' - 결과 : %s' % str.endswith('fg', 1, 3))
- 특징 : 일반적인 string 문자열에서 특정 문자를 찾으면 해당 문자열의 boolean 값을 반환.
찾으려는 대상 문자열의 마지막에서부터 시작하는 문자가 일치해야 함
ex) 'abcdefg' startswitch 'fg' -> 문자열은 'g'부터 시작하기 때문에 찾을 수 있음
'abcdefg' startswitch 'ef' -> 문자열은 'g'부터 시작하기 때문에 찾을 수 없음
- 인자값 1 : 찾고자 하는 특정 문자
- 인자값 2 : find와 동일, 찾으려는 대상 문자열에서 시작하는 인덱스 번호 지정. 끝나는 번호를 지정하지 않으면 시작 번호부터 마지막
번호의 값까지 찾게 됨.
ex) 'abcdefg' -> 1을 넣으면 1번('a')을 제외한 'bcdefg'부터 찾게 됨
- 인자값 3 : find와 동일, 찾으려는 대상 문자열에서 끝나는 인덱스 번호 지정
ex) 'abcdefg' -> 5를 넣으면 시작 번호부터 5번('e')까지 'bcde' 내에서 찾게 됨
- 반환 : 값이 있는 경우 : true
값이 없는 경우 : false
* 실행 결과
startswitch와 찾는 시작 위치만 다르고 나머지 찾는 기능은 동일하게 동작한 모습입니다. endswitch 역시 true / false 값으로 반환을 하는군요.
4. index
if __name__ == '__main__':
"""
* main 실행
"""
# string 문자열
str = 'abcdefg'
# string 배열
arr = ['a', 'b', 'c', 'd', 'e']
print('* index를 이용해서 문자열에서 \'a\' 찾기')
print(' - 결과 : %s' % str.index('a'))
print('* index를 이용해서 문자열에 없는 \'h\' 찾기')
print(' - 결과 : %s' % str.index('h'))
print('* index를 이용해서 배열에서 \'b\' 찾기')
print(' - 결과 : %s' % arr.index('b'))
print('* index를 이용해서 배열에 없는 \'f\' 찾기')
print(' - 결과 : %s' % arr.index('f'))
- 특징 : string 배열에서 특정 문자를 찾으면 해당 값의 인덱스 값을 반환, 찾고자 하는 값이 없으면 에러 발생
index는 find처럼 찾고자 하는 특정 문자의 인덱스 값을 찾는 것은 동일하지만 없는 값을 찾을 때에는 에러가 발생을 합니다.
string 문자열, string 배열 모두 동일하게 없는 값을 찾았을 때에는 에러가 발생을 합니다.
* 실행 결과 (string 문자열 대상)
* 실행 결과 (string 배열 대상)
위의 결과처럼 에러가 발생을 하게 됩니다.
최종 비교 정리
string 문자열 검색 | string 배열 검색 | 값이 없는 경우 | 반환 값 | |
find | 가능 | 불가능 | -1 | 인덱스 값 |
startswitch | 가능 | 불가능 | false | boolean |
endswitch | 가능 | 불가능 | false | boolean |
index | 가능 | 가능 | error 발생 | 인덱스 값 |
find : 값이 있는지 없는지에 대해 인덱스 값의 반환이 필요한 경우에 적절
startswitch, endswitch : 값이 있는지 없는지에 대해 boolean 값의 반환이 필요한 경우에 적절
index : find와 유사하지만 값이 없을 때는 에러가 발생을 하고, 배열값에서 특정 문자를 찾을 경우 적절
최종 정리를 하자면 일반적으로 문자열 검색할 경우에는 find를 많이 사용하게 되고, 특수한 경우에는 startswitch, endswitch를 사용하고, 종종 배열에서 찾아야 할 경우에 index를 사용합니다. 보통은 find로 많은 부분이 해결될 것 같긴 합니다.. ㅎㅎ 하지만 프로그래밍이란 게 어떤 상황과 변수가 있을지 모르니 유사한 기능들을 알고만 있어도 상황 처리하는데 많이 유용할 것 같습니다!
그럼 오늘도 저의 작고 소중한 글을 읽어주셔서 감사합니다.
'Python' 카테고리의 다른 글
파이썬 unconverted data remains 에러 해결하기 (0) | 2023.01.26 |
---|---|
파이썬 strptime() argument 0 must be str 에러 해결하기 (0) | 2023.01.24 |
파이썬 시간 format과 parse 알아보기 (time strftime(), strptime()) (0) | 2023.01.24 |
파이썬 시간지연 예제로 알아보기 time.sleep() (1) | 2023.01.23 |
[Python] 천 단위 콤마 찍는 함수와 필요성을 알아보자 (0) | 2022.12.26 |