본문 바로가기

언어/Python

[ Python ] 정규 표현식에서 전방 탐색 기능에 대해서 알아보기

반응형

파이썬 정규 표현식에서 전방 탐색(Lookahead)은 특정 패턴이 특정 부분 문자열 앞에 있는지를 확인하지만, 그 부분 문자열을 소비(consumption)하지 않는 기능입니다. 이는 문자열의 매칭을 특정 조건에 따라 제한할 때 매우 유용합니다. 전방 탐색은 긍정 전방 탐색(positive lookahead)과 부정 전방 탐색(negative lookahead)으로 나뉩니다.

1. 긍정 전방 탐색 (Positive Lookahead)

긍정 전방 탐색은 특정 패턴이 뒤따르는 경우에만 매칭을 허용합니다. 구문은 (?=...)입니다.

예제:

  • 패턴 A(?=B)B가 뒤따르는 A를 매칭합니다. 하지만 B는 매칭 결과에 포함되지 않습니다.

2. 부정 전방 탐색 (Negative Lookahead)

부정 전방 탐색은 특정 패턴이 뒤따르지 않는 경우에만 매칭을 허용합니다. 구문은 (?!=...) 또는 (?!...)입니다.

예제:

  • 패턴 A(?!B)B가 뒤따르지 않는 A를 매칭합니다.

3. 예제

다음은 전방 탐색의 예제입니다.

import re

text = "apple, banana, cherry, date"

# 긍정 전방 탐색
positive_lookahead_pattern = re.compile(r'\w+(?=,)')
positive_matches = positive_lookahead_pattern.findall(text)

# 부정 전방 탐색
negative_lookahead_pattern = re.compile(r'\w+\b(?!,)')
negative_matches = negative_lookahead_pattern.findall(text)

print("Positive Lookahead Matches:")
print(positive_matches)  # ['apple', 'banana', 'cherry']

print("\nNegative Lookahead Matches:")
print(negative_matches)  # ['date']

4. 설명

  1. 긍정 전방 탐색:
    • 패턴 \w+(?=,)는 단어 문자(알파벳 또는 숫자)가 하나 이상 있고, 그 뒤에 쉼표 ,가 뒤따르는 경우에 매칭됩니다. 따라서 apple, banana, cherry가 매칭됩니다.
    • 쉼표는 매칭 결과에 포함되지 않습니다.
  2. 부정 전방 탐색:
    • 패턴 \w+\b(?!,)는 단어 문자(알파벳 또는 숫자)가 하나 이상 있고, 그 뒤에 쉼표 ,가 뒤따르지 않는 경우에 매칭됩니다. 따라서 date가 매칭됩니다.
    • 이 경우 쉼표가 없는 단어를 찾습니다.

이 예제들은 전방 탐색의 긍정과 부정 조건을 활용하여 원하는 패턴을 매칭하는 방법을 보여줍니다. 전방 탐색은 특정 패턴이 존재하는지 여부를 확인할 수 있지만, 그 패턴 자체는 소비하지 않기 때문에 매우 강력한 도구입니다.

반응형