문자열을 다루다보면 특정 문자열이 포함되어 있는지 확인해야 하는 경우가 있습니다. Python 문자열 포함 확인 방법을 살펴보겠습니다.
목차
Python 문자열 포함 확인 방법
특정 문자열이 포함되어 있는지 확인하는 방법은 5가지가 있습니다.
in 활용
우선 조건문으로 in을 사용하는 방법입니다. 이 경우에는 문자열을 포함하고 있으면 True, 그렇지 않으면 False를 돌려줍니다.
result = "워드프레스" in "블로그는 워드프레스를 이용해 보세요!"
print(result)
result = "워드프레스" in "블로그는 티스토리를 쓰세요!"
print(result)
Python위의 코드를 실행한 결과는 다음 그림과 같이 문자열이 들어있는 경우에는 True임을 확인할 수 있으며, 문자열이 들어있지 않으면 False임을 확인할 수 있습니다.
not in 활용
문자열이 포함되었는지 확인할 때 in을 사용한다면, not in을 사용하면 특정 문자열이 들어있지 않은 경우를 바로 확인할 수 있습니다. 사실 in에 not을 붙인 것이라 in과 사용 방식은 동일하나 결과는 반대의 값을 돌려받습니다. 당연히 특정 문자열이 포함되지 않으면 True, 포함되어 있으면 False를 돌려줍니다. in과 활용 방법은 동일하므로 예제나 코드는 생략합니다.
str.find 메서드 활용
문자열에 find() 메서드를 활용하는 방법입니다. 이 경우는 결괏값이 좀 독특합니다. 찾고자 하는 문자열이 처음 발견된 곳의 위치를 알려줍니다. 만약 찾고자 하는 문자열이 없으면 -1을 반환합니다.
코드를 통해서 사용 방법을 확인해 보겠습니다.
a = "블로그는 워드프레스를 이용해 보세요! 워드프레스 만세!"
result = a.find("워드프레스")
print(result)
Python위의 경우에는 “워드프레스”라는 문자열이 a변수에서 시작하는 위치가 0(블), 1(로), 2(그), 3(는), 4( ), 5(워)번째에 있으므로 5라는 값을 되돌려 줍니다. 이후에도 “워드프레스”라는 문자열이 나오지만 처음 발견한 곳의 위치를 알려주는 것을 확인할 수 있습니다.
이번에는 문자열을 찾지 못하는 경우의 예입니다.
a = "블로그는 워드프레스를 이용해 보세요!"
result = a.find("티스토리")
print(result)
Python문자열 a에는 특정 문자열 “티스토리”가 들어있지 않기 때문에 -1이 반환되는 것을 확인할 수 있습니다.
index() 활용
index()는 find()와 같은 기능을 하지만, 조금 다른 부분이 있습니다. 우선 find()의 결과와 같이 탐색하는 문자열의 위치를 알려준다는 점은 동일합니다. 하지만 문자열을 찾지 못했을 때 find()는 -1을 반환하지만, index()는 ValueError라는 예외를 발생시킵니다.
a = "블로그는 워드프레스를 이용해 보세요!"
try:
index = a.index("워드프레스")
print(index)
print("문자열에 포함되어 있습니다.")
except ValueError:
print("문자열에 포함되어 있지 않습니다.")
Python위의 코드를 실행한 결과는 아래 그림과 같습니다.
이번에는 예외를 발생시켜보도록 하겠습니다.
a = "블로그는 워드프레스를 이용해 보세요!"
index = a.index("티스토리")
Python앞서 작성한 것과 같은 예외처리를 하지 않으면, ValueError: substring not found라는 예외를 발생시키며 어플리케이션이 종료됩니다. 따라서 index()를 이용하는 경우에는 꼭 try ~ except를 이용해서 예외 처리를 해 주시기 바랍니다.
요약합니다. index()는 find()와 같은 기능을 하지만, 문자열을 찾지 못하면 예외를 발생시키므로 예외처리가 필요한 점 기억해 두세요.
str.count() 메서드
str.count() 메서드를 이용하면 특정 문자열이 해당 문자열에 몇 개나 들어있는지 확인할 수 있습니다. 0을 반환한다면 찾고자 하는 문자열이 들어 있지 않은 것이며, 그 외의 숫자를 반환 한다면 반환값 만큼 해당 문자열에 포함되어 있음을 알 수 있습니다.
a = "나의 사랑 나의 학교 나의 나라"
a.count("나의")
a.count("너의")
Python위의 코드를 실행한 결과 입니다. 문자열 “나의”가 3개 들어가 있으므로 3을 반환합니다. 그리고 문자열 “너의”가 들어있지 않으므로 0을 반환합니다.
정규식 활용
정규식으로는 정규식은 단순 문자열을 찾을 때보다는 특정 패턴의 문자열을 찾을 때 유용하긴 하지만, 물론 그냥 문자열을 찾을 수도 있습니다.
import re
a = "블로그는 워드프레스를 이용해 보세요!"
re.search("워드프레스", a)
re.search("티스토리", a)
Python문자열을 찾은 경우에는 re.Match 오브젝트가 반환되지만, 문자열을 찾지 못한 경우에는 None이 반환됩니다.
split() 활용
실용적으로 쓰지는 않겠지만 이런 방법도 사용할 수 있다는 것을 생각해 두면 때론 요긴하게 활용할 수도 있습니다. split()는 특정 문자열로 문자열을 쪼개는 역할을 합니다. 따라서 문자열이 2개 이상으로 쪼개졌다면 특정 문자열을 포함하고 있다고 볼 수 있으며, 문자열이 쪼개지지 않고 1개라면 특정 문자열을 포함하고 있지 않다고 판단할 수 있습니다.
하지만 이 방법은 비교적 메모리를 많이 사용하기 때문에 단순히 문자열이 있는지 확인하는데 사용하기는 적절치 않습니다만, 이런 방법으로도 확인할 수 있다는 정도로 참고만 해 두시기 바랍니다.
a = "블로그는 워드프레스를 이용해 보세요!"
result = a.split("워드프레스")
print(result)
print(len(result))
Pythonsplit() 메서드는 결과를 쪼개진 문자열들을 리스트로 담아서 돌려줍니다. 지금은 특정 문자열 “워드프레스”가 들어있으므로 2 값을 돌려받게 됩니다.
이번에는 문자열이 들어있지 않은 경우를 확인해 보겠습니다.
a = "블로그는 워드프레스를 이용해 보세요!"
result = a.split("티스토리")
print(result)
print(len(result))
Python이번에는 특정 문자열 “티스토리”가 문자열 a에 들어있지 않으므로 문자열이 그대로 담긴 리스트 result를 돌려받게 됩니다. 당연히 담겨 있는 문자열의 갯수는 1개 이므로 1을 돌려받게 됩니다.
목표를 향해서 달려가는 것도 중요하지만, 다양한 방법들에 대해서 생각하고 고민해 보는 것은 좋은 일입니다. 여러분의 문제 해결을 응원하며 글을 맺습니다.
관련 자료
Python의 Built-in Types 페이지를 참고했습니다.