본문 바로가기

언어/Python

[ Python ] match() 에서 표현식 (?? vs *? vs +?) 설명과 예제

반응형

파이썬 정규표현식에서 expr??, expr*?, expr+?의 차이는 패턴의 매칭 방식과 반복 횟수에 관련된 non-greedy 매칭을 제어하는 방법입니다. 아래는 각 표현식의 설명과 예제입니다.

1. 설명

  1. expr??:
    • expr?expr이 0번 또는 1번 나타나는 경우를 매칭합니다.
    • expr??는 가능한 한 적게 매칭하려고 시도합니다. 즉, expr이 있으면 0번 나타나는 경우를 우선적으로 매칭합니다.
  2. expr*?:
    • expr*expr이 0번 이상 나타나는 경우를 매칭합니다.
    • expr*?는 가능한 한 적게 매칭하려고 시도합니다. 즉, expr이 없는 경우를 우선적으로 매칭합니다.
  3. expr+?:
    • expr+expr이 1번 이상 나타나는 경우를 매칭합니다.
    • expr+?는 가능한 한 적게 매칭하려고 시도합니다. 즉, expr이 1번 나타나는 경우를 우선적으로 매칭합니다.

2. 예제

다음 예제들은 각각의 non-greedy 패턴이 어떻게 동작하는지를 보여줍니다.

import re

text = "abbbbc"

# expr??
pattern1 = re.compile(r'ab??')
match1 = pattern1.search(text)

# expr*?
pattern2 = re.compile(r'ab*?')
match2 = pattern2.search(text)

# expr+?
pattern3 = re.compile(r'ab+?')
match3 = pattern3.search(text)

print("Pattern expr??:")
print(match1.group())  # a

print("\nPattern expr*?:")
print(match2.group())  # a

print("\nPattern expr+?:")
print(match3.group())  # ab

3. 설명

  1. ab??:
    • 가능한 한 적게 매칭하므로, a만 매칭됩니다. b는 0번 나타나는 경우를 우선 매칭합니다.
  2. ab*?:
    • 가능한 한 적게 매칭하므로, a만 매칭됩니다. b*는 0번 나타나는 경우를 우선 매칭합니다.
  3. ab+?:
    • 가능한 한 적게 매칭하므로, ab가 매칭됩니다. b+는 최소 1번 나타나야 하므로 ab가 매칭됩니다.

이 예제들은 non-greedy 패턴이 어떻게 동작하는지와 매칭 결과를 보여줍니다. non-greedy 패턴은 greedy 패턴과 반대로 가능한 최소한의 반복을 시도합니다.

반응형