본문 바로가기
Python

Regex - 소/중/대 괄호 이해

by 올엠 2024. 4. 8.
반응형

Regex를 이용하면 가장 많이 사용되는 것이 바로 (),[],{} (앞에서부터 소괄호 대괄호 중괄호)조합이다.

이 조합은 조금 사용하다보면 익숙해 지는데, 보다 쉽게 이해할 수 있는 방법에 대해서 정리를 해보도록 하겠다.

하나의 표현에 사용되는 기본 조합식은 다음과 같다.

먼저 소괄호 대괄호(이하 ()괄호, []괄호로 표현)는 각각 하나의 조건이라고 보면 된다.

그리고 만약 ()[]{} 순서로 사용한다면, 정규표현식은 다음과 같이 조건1, 조건2, 그리고 조건2의 길이라는 의미이다.

또하나 중요한 점이 기본적으로, 줄바꿈(엔터)을 기준으로 입력한 매칭조건을 찾게 된다.

(줄바꿈 이후 다시 매칭 조건과 일치하는 값이 있으면 매칭이 여러개 생성.)

소괄호()

괄호는 문자 그룹을 정의하는데 사용이 된다. 특정 단어로 찾을 때 용이 하다.

 

Regex는 기본적으로 그룹단위로 매칭된 내용을 저장한다. 따라서 소괄호는 가장 기본이 되는 그룹 단위에 사용이 된다. 만약 Hello-0001.txt 중 Hello를 고정하고 싶다면, (Hello.+)를 넣어서 Hello는 공정하고 .을 통해 모든 문자를 명칭할 있다.

()괄호 역시 여러개 사용할 수 있고, ()괄호 안에 다시 ()괄호로 그룹속에 그룹을 만들어서 매칭을 만들어낼 수 있다.

이를 이용하면, 결과값에 그룹화가 만큼 생성되기 때문에, Match 내 결과를 확인할 때 그룹으로 다시 정밀한 데이터 가공이 가능해진다.

Hello로 포함된 모든 문자열은 아래와 같다. ^등을 이용해서 시작, 끝은 $등도 지정할 수 이지만, 이는 다음 기회에...

regex_hello = '(Hello.+)'

 

대괄호[]

대괄호는 일치하는 문자를 찾는 용도로 사용되며, 개별 문자 하나씩 매칭을 확인한다. 소괄호와 동일하게 [Hello.+]를 사용하면, H, e, l,o,.,+가 일치하는 조건을 의미하여 Hello . 만 일치로 결과를 반환하게 되며, 그룹화는 하지 않는다.

그룹화는 되지 않으므로, {}길이를 사용하면, 이때 매칭 길이가 변화하게 된다.

[]를 연속적으로 사용할 수 있지만, ()괄호가 사용되면, ()이후 다음 []만 중괄호 조건으로 사용되며, {}를 이용해서 각 []괄호에 길이를 입력해 주어야 한다.

phone_regex = r'[\d]{3}[\d]{4}[\d]{4}'

따라서 이때에는 []만으로 이루어진 조건을 만드는것을 추천한다.

 

중괄호{}

중괄호는  []괄호를 통해 매칭된 문자의 매칭 반복 수(길이)를 일치하도록 해주는 역활을 한다. 즉 []괄호와 사용되며, 그룹화에서는 사용되지 않기 때문에 여러 []괄호를 사용하여 매칭을 찾을 때 사용된다.

만약 {1,4}는 1부터 4번째 사이의 문자열이 일치하는 것을 반환하게 된다.

()괄호와 함께 쓸수도 있고, []괄호와 함께 사용할 수 도 있다.

 

만약 그룹 하나에 모두 담고 싶다면, 아래와 같이 만들 수 있다.

regex_hello = '(Hello-\d+.txt)'

 

반응형