티스토리 뷰

오늘은 정규표현식에 대해 정리해보려고 합니다.

정규표현식을 모르는 사람이 표현식을 보면 매우 난해하게 느껴지지만 알고 사용하면 정말 정말 유용하기 때문에, 겁먹지 마시고 공부해보시길 바랍니다 (문자열 처리에 수십 줄의 코드를 작성해야 할 걸 단 몇 줄 만에 끝낼 수 있거든요!)

정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어 입니다. (위키 참고) 

이 정규표현식을 사용하면 특정한 규칙을 만족하는지 유효성 검사에 유용하기 때문에 사용자가 입력한 이메일이나 비밀번호가 우리가 만들어 놓은 패턴 혹은 규칙과 부합하는지 쉽게 확인할 수 있습니다. 

우선 정규표현식을 사용하려면 사용방법을 알아야겠죠? 

정규 표현식에는 다음과 같은 *메타 문자들이 사용됩니다. 

*  메타 문자: 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자

. ^ $ * + ? { } [ ] \ | ( )
예를 들어 [a-z]로 표현하면 문자열에서 소문자 a부터 z까지 문자열에서 알파벳 소문자하고만 매치가 됩니다.
[0-9] -> 문자열에서 0~9 숫자 하고만 매치
[a-zA-Z] -> 문자열에서 모든 알파벳과 매치

 

그럼 각 문자가 어떤 의미를 나타내는지 문법을 살펴보져! 

먼저 regexr.com 여기로 들어가서 아래의 문법들을 같이 확인해보시길 추천드립니다. 

사용 방법은, 다음과 같이 양쪽 / 안에 정규식을 넣어주시면 됩니다. 다음과 같이요 -> /정규식

그럼 정규식에 맞는 문자들을 찾아서 하이라이트로 표시해 주기 때문에 빠르게 결과를 확인하기 좋습니다.

| 또는(or)
( ) 그룹 짓기
[ ] 문자 셋 (괄호 안에 포함된 어떤 문자든 매칭)
[^ ] 문자 셋 부정 (괄호 안의 문자가 아닌것들과 매칭)

 

0. 일반적인 단어 매칭 

create와 일치하는 문자 매칭

1. | 사용 예

0 또는 1인 문자와 매칭

2. ( ) 사용 예

0 또는 1, 또는 create와 매칭
Te 또는 De와 매칭

3. [ ] 사용 예

알파벳 대문자만 매칭

4. [^ ] 사용 예

숫자 0~4 를 제외한 문자와 매칭

 

? 있거나 없거나 (즉, 한개가 있거나 아예 없거나)
* 없거나 한개 이상 있을 때
+ 한개 이상 있을 때
{n} n번 반복
{min, } 최소 ~
{min, max} 최소 ~ 최대

 

1. ? 사용 예 

f가 있거나 없거나 -> Eel, Efel만 해당

2. * 사용 예

f가 없거나 1개 이상일 때  -> 전부 해당

3. + 사용 예

f가 1개 이상일 때 -> Efel, Effel, Efffel만 해당

4. {n} 사용 예

T + a~z 사이 문자 3개 + s  -> Tests, Tools와 매칭

5. {min, } 사용 예

T또는 D로 시작하고 가운데에 a~z까지 두 글자 이상 포함하며 맨 끝은 s로 끝나는 문자와 매칭-

6. {min, max} 사용 예

T또는 D로 시작하고 가운데에 a~z까지 두 글자 ~ 세 글자 포함하며 맨 끝은 s로 끝나는 문자와 매칭

 

아래의 두 개 표를 잘 보시면 \소문자는 특정 조건에 부합하는 문자를 구분하거나 찾는 경우이고 \대문자는 소문자 조건과 반대의 형식으로 동작하는 것을 볼 수 있습니다. 

\b 단어 구분자
\B \b 반대의 경우 (단어 구분자에 해당 안되는 경우)
^ 문자열의 시작
$ 문자열의 끝

1. \b 사용 예 

2. \B 사용 예

3. ^ 사용 예

4. $ 사용 예

 

. 줄 바꿈 문자를 제외한 모든 문자
\d 숫자
\D 숫자가 아닌 것
\w word 문자
\W word 문자가 아님
\s 공백
\S 공백 아님

1. . 사용 예

. 은 모든 문자를 포함함으로 위 문자들 모두 매칭 -> a + 모든 문자 + b

2. \d 사용 예

숫자인것들과 모두 매칭

3. \D 사용 예

숫자가 아닌것들과 매칭

4. \w 사용 예

특수문자 공백등을 제외한 모든 문자와 매칭 (보기에는 없지만 숫자도 포함!)

5. \W 사용 예

\w와 반대로 작동 -> 특수문자, 공백등과 매칭

6. \s 사용 예

공백과 매칭

7. \S 사용 예

공백이 아닌 문자와 매칭

 

정규표현식은 언어별로 차이가 없지만, 각각 언어의 지원 모듈, 라이브러리에 따라 사용법에 차이가 있으니 사용하시는 언어별로 사용법을 공부하셔서 사용하시면 될 것 같습니다.  

파이썬은 아래의 점프 투 파이썬 정규식 글 추천드립니다 :) 

wikidocs.net/1642

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

간단하게 문자열 처리 알고리즘 하나 풀어볼까요? 

문제는 2018 KAKAO BLIND RECRUITMENT 3차에 나온 파일명 정렬이라는 문제입니다. 

programmers.co.kr/learn/courses/30/lessons/17686?language=python3

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

문제를 보면 아시겠지만, 정규식을 쓰지 않고 문제를 풀게 되면,  문자열을 반복문을 통해 순회하며 조건문으로 처리해줘야 하기 때문에 코드량이 많아지게 됩니다. 하지만 우리가 배운 정규식을 쓰면 다음과 같이 적은 코드로 문제를 해결할 수 있습니다. 

파이썬 코드)

import re

def solution(files):
    return sorted(files, key = lambda x: (re.findall("[^0-9]+", x)[0].lower(), int(re.findall("\d+", x)[0])))

흔히 많이 축약한 코드는 가독성이 떨어져 좋지 않다고도 하는데, 이 코드는 축약을 했다기보다 정규식을 사용함으로써 불필요한 반복문과 조건문이 사용되지 않아 코드가 짧아진 것이기 때문에 파이썬을 사용하고 정규식에대한 이해가 있다면 읽기 어려운 코드는 아니라고 생각합니다 :) 

긴 글 읽어주셔서 감사합니다! 

댓글
링크
최근에 올라온 글
최근에 달린 댓글