본문 바로가기

언어/Python

[ Python ] 정규표현식에서 부정적 전방 탐색 사용하기

반응형

부정 전방 탐색(Negative Lookahead)은 정규 표현식에서 특정 패턴이 뒤따르지 않는 경우에만 매칭을 허용하는 기능입니다. 부정 전방 탐색의 구문은 (?!...) 또는 (?!=...)입니다. 이 기능을 사용하면 특정 조건을 만족하지 않는 패턴을 매칭할 수 있습니다.

1. 부정 전방 탐색의 사용법

부정 전방 탐색을 사용하면 특정 패턴이 문자열 뒤에 오지 않는 경우에만 매칭이 가능합니다. 이 패턴은 실제 매칭에 포함되지 않으므로 패턴 자체는 소비되지 않습니다.

2. 예제

다음 예제는 부정 전방 탐색을 사용하여 "apple"이 뒤따르지 않는 단어를 찾는 방법을 보여줍니다.

import re

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

# 부정 전방 탐색 패턴
pattern = re.compile(r'\b\w+\b(?!\sapple)')
matches = pattern.findall(text)

print("Matches with Negative Lookahead:")
print(matches)  # ['I', 'have', 'an', 'pie', 'and', 'a', 'banana', 'split.', 'I', 'also', 'have', 'a', 'cherry', 'tart.']

3. 설명

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

이 예제에서는 "apple"이 뒤따르지 않는 모든 단어를 찾습니다.

4. 또 다른 예제

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

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(?:pie|split))')
matches_neg = pattern_neg.findall(text)

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

5. 설명

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

이 예제에서는 "pie" 또는 "split"이 뒤따르지 않는 모든 단어를 찾습니다.

부정 전방 탐색을 사용하면 특정 조건을 만족하지 않는 패턴을 효과적으로 찾아낼 수 있으며, 이를 통해 복잡한 문자열 매칭을 쉽게 구현할 수 있습니다.

반응형