웹 서비스 개발(FB,BE,SERVER,DB)/Python

10. 정규표현식(Regual Expressions)

Zoo_10th 2024. 1. 14.

1. 정규표현식(Regual Expressions)

문자열 처리에 매우 강력하고 유연한 도구이며, 텍스트 데이터 처리, 데이터 유효성 검사, 문자열 추출, 대체 및 변환 등 다양한 용도로 사용된다.

문자열 패턴을 검색, 추출, 변환 등의 작업을 수행하기 위해 사용되는 표현 언어이다.

특정 문자열을 찾기 위해 와일드 카드로 *이나 ?를 사용하거나 특정한 문자 집합을 [ ] 표현하거나 숫자 또는 알파벳과 일치시키기 위해 \\d, \\w와 같은 패턴을 사용할 수 있다.

파이썬에서는 정규표현식을 사용하기 위해 re 모듈을 제공하고 있다. re모듈을 import 하여 정규표현식을 컴파일하고 문자열과 매칭하거나 원하는 작업을 수행할 수 있다.

 

1.1 정규표현식 사용 방법

정규표현식은 파이썬 자체 문법이 아니기 때문에, 정규표현식 모듈을 import 해야 한다. 정규 표현식 모듈은 문자열을 찾거나 변환하는 함수들이 존재하며, 특정한 규칙을 사용하여 문자를 변환하거나 찾을 수 있도록 한다.

import re # 정규표현식 가져오기

pattern = re.compile(문자클래스) # 검증해야할 문자의 패턴을 컴파일하여 객체로 저장
patern.함수명(문자열) # 정규표현식에서 사용되는 Method를 사용하여 대상 문자열 매칭

 

 - 메타 문자

정규표현식에서는 특별한 용도로 사용되는 문자를 메타문자라 한다 메타문자는 총 12개가 있으며, 각각은 특수한 기능을 수행한다.

.  ^  $  *  +  ?  {  }  \  |  (  )

 

-문자 클래스

정규식이 적용될 문자들의 집합으로, 대괄호([ ]) 안에 포함된 문자들 중 하나와 매치됨을 의미한다. 대괄호 안의 문자들이 매칭할 문자의 범위를 지정해 주는 것이다.

(-)를 사용하여 어디서부터(From) 어디까지(To)의 범위를 표현할 수 있다.

별도 표기법 정규 표현식 내용
\d [0-9] 모든 숫자
\D [^0-9] 모든 숫자 제외
\s [\t\n\r\f\v] 빈칸, 줄 바꿈 등의 공백
\S [^\t\n\r\f\v] 빈칸, 줄 바꿈 등의 공백 제외
\w [a-zA-z0-9] 모든 문자(알파벳)와 모든 숫자
\W [^ a-zA-z0-9 ] 모든 문자(알파벳)와 모든 숫자 제외

 

1-2. 정규 표현식 Method

- match()

문자열의 첫 시작부터 정규식 규칙에 벗어나지 않고 유효한 위치까지 확인할 수 있도록 해준다.

문자열의 처음부터 정규식과 매치되는지 확인한다. 만약 match가 되면 match 된 객체를 반환하고 match가 되지 않을 경우 None를 반환한다.

 

 

- search()

 

문자열 전체를 대상으로 위치와 상관없이 정규식 규칙에 부합하는지 확인하는 것이다.

일치하는 부분이 문자열 전체에서 발견되면 해당 객체를 반환하고 그렇지 않으면 None을 반환한다.

 

- findall()

정규식과 일치하는 모든 문자열을 List로 반환한다.

 

- finditer()

정규식과 매치되는 모든 문자열을 iterator 객체로 반환한다.

 

2. 정규표현식 사용하기

2-1. 메타문자(Meta characters)

메타 문자는 원래 가진 문자의 뜻이 아닌 특별한 용도로 사용되는 문자를 말한다.

- Dot( . ) 

숫자, 문자, 영어, 한글, 특수문자, 등 \n을 제외한 모든 문자와 매칭된다.

반드시 하나 이상의 문자가 있어야 하며 [.]은 문자 Dot( . )을 의미한다.

- Asterisk( * ) 

바로 앞의 문자가 0~n번 등장하는 경우 매치되며 *앞에 문자가 없거나 여러 번 등장하는 것을 찾는 것을 의미한다.

- Plus( + ) 

문자열에서 바로 앞에 문자가 1~n번 등장하는 경우, +는 없을 수 없고 반드시 한 번 이상 반복되어야 매칭된다.

- {m} 

바로 앞에 문자가 m번 등장하는 경우에 매치된다.

- {m,n} 

문자열에서 m번부터 n번까지의 문자열이 등장한 경우, 해당 문자열과 매칭한다.

- ?

바로 앞에 문자가 0~1번 등장하는 경우 매칭된다. {0,1}과 같다.

- Vertical Bar, Pipe( | )

논리식의 or와 같이 '또는'을 뜻하며 여러 패턴 중 하나 이상과 매칭되는지 확인할 수 있다.

- Carent, Circumflex( ^ )

^뒤에 오는 문자열로 시작하는 문자열을 매치한다. 다만 가장 앞에서 사용할 경우, 문자 클래스의 문자를 제외한 문자에 대한 부정(NOT)을 의미한다.

- $

앞에 문자로 끝나는 문자열과 매칭된다.

 

2-2. 그룹(Group) 사용하기

 

- 그룹핑(Grouping)

앞에서 매칭한 문자열을 그룹화하여 값을 직접 가져오거나, 매칭한 문자열을 묶어서 찾을 수 있다. 

괄호 ( )로 묶어주면 그룹핑된 값을 가져올 수 있다.

- 그룹 이름 정의

각 그룹에 대해 이름을 정의할 수 있으며, groupdict를 사용하여 각 key와 value가 어떻게 매칭되는지 확인할 수 있다.

?P<그룹명>을 사용하여 지정된 그룹의 이름을 정의할 수 있다.

 

2-3. 문자열 바꾸기(sub)

매칭된 문자열을 다른 문자열로 바꾸기 위해서 sub함수를 사용할 수 있다.

sub(변경할 문장, 변경될 문장, 변경 횟수)

sub을 사용하여 주민번호 뒷자리를 *로 바꾸는 코드

 

728x90

'웹 서비스 개발(FB,BE,SERVER,DB) > Python' 카테고리의 다른 글

9. 예외 처리(Exception Handling)  (0) 2024.01.13
8. 패키지(Packages)  (0) 2024.01.13
7. 모듈(Module)  (2) 2024.01.13
6. 클래스(Class)  (1) 2024.01.10
5. 파이썬 활용  (0) 2024.01.10

댓글