Python에서 여러 문자열 포함 여부 확인하기
리스트에 담긴 여러 문자열 중 하나라도 대상 문자열에 포함되어 있는지 확인하려면, 파이썬의 내장 함수 any()를 활용하면 간단하게 처리할 수 있습니다. any()는 반복 가능한(iterable) 객체를 순회하면서 요소 중 하나라도 참(True)으로 평가되면 즉시 True를 반환하는 함수입니다.
예제 1: any() 함수 사용하기
arr = ['a', 'e', 'i', 'o', 'u']
str = "hello people"
if any(c in str for c in arr):
print("일치하는 항목을 찾았습니다")위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
일치하는 항목을 찾았습니다
"hello people"이라는 문자열에는 모음 리스트(arr)에 포함된 'e', 'o' 등의 문자가 들어 있으므로 조건식이 참이 되어 메시지가 출력됩니다. 반대로 일치하는 문자가 하나도 없다면 아무것도 출력되지 않습니다. 여기서 사용된 제너레이터 표현식 (c in str for c in arr)은 리스트의 각 요소가 문자열에 존재하는지 하나씩 검사합니다.
예제 2: 정규 표현식(regex) 사용하기
조금 과한 방법일 수 있지만, 정규 표현식을 사용해서 동일한 작업을 수행할 수도 있습니다. 리스트의 각 요소를 OR 연산자인 |로 이어 붙여 하나의 패턴을 만든 뒤, 이를 re.findall()로 문자열에서 검색하는 방식입니다.
import re
arr = ['a', 'e', 'i', 'o', 'u']
str = "hello people"
if any(re.findall('|'.join(arr), str)):
print('일치하는 항목을 찾았습니다')실행 결과는 다음과 같습니다.
일치하는 항목을 찾았습니다
어떤 방법을 선택해야 할까?
두 방법 모두 동일한 결과를 얻을 수 있지만, 단순히 포함 여부만 확인하는 것이 목적이라면 제너레이터 표현식과 함께 any()를 사용하는 첫 번째 방법이 더 직관적이고 가독성이 좋습니다. 정규 표현식은 대소문자 무시, 단어 경계 지정 등 더 복잡한 패턴 매칭이 필요할 때 진가를 발휘합니다.