파이썬 정규 표현식의 비저장 괄호
괄호 ( )는 두 가지 기능을 수행합니다 -
문자 그룹화와 캡처 그룹(카드) 기능입니다. 그런데
그룹화는 필요하지만 캡처 그룹에 담고 싶지 않다면
어떻게 해야 할까요? 이러한 문제를 해결하기 위해
특별한 비저장 괄호 (?: )가 고안되었습니다 -
이것은 그룹화는 하지만 캡처 그룹에 담지 않습니다.
예제
다음 예제에서 첫 번째 괄호는 그룹화를 위해, 두 번째 괄호는 캡처 그룹을 위해 필요합니다. 하지만, 두 괄호 모두 데이터를 캡처 그룹에 저장합니다:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
결과적으로 우리의 캡처 그룹에는 다음이 저장됩니다:
print(res[0]) # 'abab123' 출력
print(res[1]) # 'ab' 출력
print(res[2]) # '123' 출력
예제
첫 번째 괄호 쌍이 그룹화만 하고 캡처 그룹에는 저장하지 않도록 만들어 봅시다:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
결과적으로 첫 번째 캡처 그룹에는 우리의 숫자가 저장됩니다:
print(res[1]) # '123' 출력