IT지식/나머지

[IT지식]정규 표현식 - 기초 및 사용 예시

매 석 2022. 10. 13. 22:04
반응형

 

1. 정규 표현식이란?

특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기 

프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히  Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다.

현재 많은 프로그래밍 언어, 텍스트 처리 프로그램, 고급 텍스트 편집기 등이 정규 표현식 기능을 제공한다. 일부는 , 자바스크립트, 루비, Tcl처럼 문법에 내장되어 있는 반면 닷넷 언어, 자바, 파이썬, POSIX C, C++ (C++11 이후)에서는 표준 라이브러리를 통해 제공한다. 그 밖의 대부분의 언어들은 별도의 라이브러리를 통해 정규 표현식을 제공한다.

출처: 정규 표현식 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

2. 정규 표현식 사용하는 이유

간단한 예시로 회원가입을 할 때 무조건 영문과 숫자로만 아이디를 생성해야 한다.

서버에서는 사용자가 한글을 입력하거나 영문과 숫자 이외의 문자가 입력되면

생성할 수 없는 아이디라고 알려주어야 한다. 이를 프로그래밍으로 구현하려면

상당히 많은 코드를 입력해야 한다. 

하지만 정규 표현식을 사용하면 몇 줄만 입력하여 이 문제를 해결할 수 있다.

즉 위와 같이 텍스트를 검증하거나 또는 특정 텍스를 강조, 파싱, 처리, 스크래핑 등 

다양한 형태로 사용할 수 있다. (데이터가 무조건 텍스트일 필요는 없다.)

 

3. 정규 표현식의 단점

검색 엔진에는 유용할 수 있으나 복잡한 정규 표현식을 데이터베이스에서 처리하며 과도한 자원을 소비할 수 있다.

그렇기에 보통의 경우 시스템 관리자들이 정규 표현식 기반 쿼리를 내부적으로 수행할 수 있지만 대부분의 검색 엔진들은 일반 사용자에게 정규 표현식 지원을 제공하지 않는다.

+ 정규 표현식을 모르는 일반인은 전혀 이해할 수 없을 정도로 가독성이 떨어진다.

 

4. 정규 표현식의 기초적인 문법

메타문자 설명
^ 문자열의 시작
$ 문자열의 끝
x|y x 또는 y
[abc]  a,b,c중 1개
[a-z] a부터z까지 영소문자 중 1개
[^a-z] a부터z까지 영소문자를 제외한 개체 1개
{n}  n번 반복
{m,n} 최소 m번에서 최대 n번까지 반복
0번 이상 반복 = {0,}
+ 1번 이상 반복 = {1,}
?   0번 또는 1번 반복 = {0,1}
\s  공백 한 개
\S   공백이 아닌 개체 한 개
\d  숫자 한 개 [0-9]
\D   숫자가 아닌 개체 한 개 [^0-9]
\w   영문,숫자,밑줄 중 한 개  [a-zA-Z0-9_]
\W  영문,숫자,밑줄 아닌 개체 한 개 [^a-zA-Z0-9_]

 

5. 정규 표현식의 간단한 예시

#장고 프로젝트 urls.py의 일부분
re_path(r'^(?P<name>[A-Z][a-z]*)$', views.sayHello)

 

 

파이썬 환경에서 정규표현식을 이용해 URL 패턴을 처리하는 과정이다.

정규 표현식 부분은 ^(?P<name>[A-Z][a-z]*)$ 이다.

1. (?P<이름>패턴) 형식은 URL에서 입력받은 값 중에 패턴에 일치하는 값을 '이름' 파라미터로 넘겨주라는 뜻이다.

2. [A-Z][a-z]* 는 첫 글자는 무조건 대문자 중 1개이고, 그 이후에는 소문자가 나오거나 없는 경우이다.

EX) 입력값 : Hello -> 첫 글자 대문자 + 이후 값에 소문자 = 조건 만족 -> name 파라미터로 값을 넘겨줌

+앞의 r부분은 파이썬에서 패턴을 명시할 때 편리하여 자주 사용한다. (자세한 설명은 아래 링크를 참조)

 

 

정규표현식 python re r' (raw string)

re모듈을 사용할 때 패턴을 만들어서 사용할 수 있다. 패턴을 미리 컴파일하면, 여러 번 재사용할 때 편하기 때문이다. 패턴을 명시할 때, r 문자를 사용하는 것을 볼 수있다. ex) re.compile(r'(\d+)/(\d+

newpower.tistory.com

 

6. 마무리하며

정규 표현식은 간단한 예시만 보아도 굉장히 어렵다.

그렇기에 이러한 방법도 존재한다는 상식정도로 접근하는 것이 좋다.

하지만 텍스트를 분석하거나 데이터를 분석하는 관계자들은 

정규표현식을 사용할 일이 생길 수도 있다. 

그렇기에 기초를 학습해 놓는 것이 더 좋다.