본문 바로가기

언어/Python

[ Python ] 정규표현식에서 다중 패턴으로 전방 탐색하기

반응형

파이썬 정규표현식에서 전방 탐색 기능을 사용하여 다중 패턴을 검색할 수 있습니다. 이를 통해 여러 조건을 동시에 만족하는 문자열을 찾을 수 있습니다. 전방 탐색을 여러 번 사용하면 다중 조건을 적용할 수 있습니다.

1. 예제

다음 예제는 전방 탐색을 사용하여 문자열에서 "apple" 또는 "banana"가 뒤따르는 단어를 찾는 방법을 보여줍니다.

import re

text = "I have an apple pie and a banana split. I also have a cherry tart."

# 긍정 전방 탐색을 사용한 다중 패턴 검색
pattern = re.compile(r'\b\w+(?=\s(?:apple|banana))')
matches = pattern.findall(text)

print("Matches with Positive Lookahead for Multiple Patterns:")
print(matches)  # ['an', 'a']

2. 설명

  • 패턴 \b\w+(?=\s(?:apple|banana))는 다음과 같이 해석됩니다:
    • \b는 단어 경계를 의미합니다.
    • \w+는 하나 이상의 단어 문자를 매칭합니다.
    • (?=\s(?:apple|banana))는 뒤에 공백(\s)과 "apple" 또는 "banana"가 오는 경우에 매칭을 허용합니다.
    • (?:apple|banana)는 non-capturing group으로 "apple" 또는 "banana" 중 하나를 매칭합니다.

이 예제에서는 "apple" 또는 "banana" 앞에 있는 단어를 찾습니다.

3. 추가 예제

다음 예제는 "apple" 또는 "banana"가 뒤따르지 않는 단어를 찾는 부정 전방 탐색의 예제입니다.

import re

text = "I have an apple pie and a banana split. I also have a cherry tart."

# 부정 전방 탐색을 사용한 다중 패턴 검색
pattern_neg = re.compile(r'\b\w+\b(?!\s(?:apple|banana))')
matches_neg = pattern_neg.findall(text)

print("Matches with Negative Lookahead for Multiple Patterns:")
print(matches_neg)  # ['I', 'have', 'pie', 'and', 'split.', 'I', 'also', 'have', 'cherry', 'tart.']

4. 설명

  • 패턴 \b\w+\b(?!\s(?:apple|banana))는 다음과 같이 해석됩니다:
    • \b는 단어 경계를 의미합니다.
    • \w+는 하나 이상의 단어 문자를 매칭합니다.
    • \b는 단어 경계를 의미합니다.
    • (?!\s(?:apple|banana))는 뒤에 공백(\s)과 "apple" 또는 "banana"가 오지 않는 경우에 매칭을 허용합니다.

이 예제에서는 "apple" 또는 "banana" 앞에 오지 않는 단어를 찾습니다.

이와 같이 전방 탐색 기능을 사용하여 다중 패턴을 검색할 수 있으며, 긍정 전방 탐색과 부정 전방 탐색을 적절히 조합하여 복잡한 검색 조건을 구현할 수 있습니다.

반응형