본문 바로가기
Python/기본문법

Regular Expression (정규표현식)

by yororing 2024. 3. 26.

00 개요

1. 정의

1) 정규표현식 (Regular Expression)이란

  • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용는 형식/언어
  • 문자열을 처리하는 방법 중 하나로, 복잡한 조건문이 아닌 한줄로 간단히 표현
  • 가독성은 떨어지기 때문에 표현식 숙지 필수
  • 정규표현식의 주 용도:
    • text에서 원하는 특정 pattern을 찾을 경우 (전화번호/ 홈페이지 등)
    • pattern을 다른 문자열로 변환할 경우
    • 사용자가 입력한 데이터가 특정 pattern에 유효한지 유효성 검사할 경 (이메일 / 비밀번호)
    • 등등

2) 정규표현식의 '패턴(Pattern)'

  • 정규표현식은 패턴을 사용해서 문자열을 처리함
  • 기본 원리:
    • 대상 문자열에 정규표현식을 적용해서 찾을 문자열을 검색함
    • 조건에 맞는 문자열을 찾은 이후 추출 또는 치환 가능

01 정규표현식 패턴 종류

  • 각 패턴을 개별적으로 또는 함께 혼합해서 사용

1.  매칭

패턴 기능 예시 설명 
. - 문자 하나
- 모든 문자열 종류 (숫자, 한글, 영어, 특수기호, 공백 등)
- newline 제외 (DOTALL flag 표시하면 newline도 포함)
“...” 문자열의 길이가 세 글자 이상인 것을 찾음
a-z
A-Z
A-z
영어알파벳(-으로 범위 지정)    
ㄱ-ㅎ
가-힣
한글 문자(-으로 범위 지정)    
0-9 숫자(-으로 범위 지정)    
\d 숫자    
\D 숫자가 아닌 것    
\w 영어 알파벳, 숫자, 언더스코어(_)    
\W /w 가 아닌 것    
\s space 공백    
\S space 공백이 아닌 것    
\특수기호 특수기호    

2. 검색

패턴 기능 예시 설명 
| OR(또는), | 로 구분된 문자에 해당하는 문자열 찾음 “데이터|데이타” ‘데이터’ 또는 ‘데이타’에 해당하는 문자열을 찾음
[문자] [ ] 안에 나열된 패턴에 해당하는 문자열을 찾음 “[123]d” 대상 문자열에서 ‘1d’ 또는 ‘2d’ 또는 ‘3d’인 문자열을 찾음
[^문자 ] 괄호 안의 문자를 미포함하는 문자열 찾음 “[^안녕]” ‘안’ 또는 ‘녕’을 포함하지 않는 문자열 찾음. ‘안녕’, ‘안해’, ‘정녕’ 모두 제외됨
^문자열 시작하는 문자열을 찾음 “^안녕” 대상 문자열에서 ‘안녕’으로 시작하는 문자열을 찾음
문자열$ 끝나는 문자열을 찾음 “잘가$” 대상 문자열에서 ‘잘가’로 끝나는 문자열을 찾음
() 그룹 검색 및 분류(match메서드에서 그룹별로 묶어줌)    
(?: 패턴) 그룹 검색(분류X)    
\b 단어의 처음/끝    
\B 단어의 처음/끝이 아님    

3.  수의 제한

패턴 기능 예시 설명 
? 0~1회 나타나는 문자 “[가나다]?” ‘가’ 또는 ‘나’ 또는 ‘다’가 0~1회 등장하는 문자열을 찾음. ‘가지’, ‘나라’, ‘코코’ 해당
* 0회 이상 나타나는 문자 “a*” ‘a’가 0번 이상 등장하는 문자열을 찾음. ‘b’, ‘a’, ‘aa’ 해당
+ 1회 이상 나타나는 문자 “국+” ‘국’이 1번 이상 등장하는 문자열을 찾음. ‘한국’, ‘미역국’ 해당
{n}
n회 나타나는 문자 “치{3}” ‘치’가 3회 등장하는 문자열을 찾음. ‘치치치’, ‘치카치카치카’ 해당
{n, } 최소 n회 이상 나타나는 문자 “치{1, }” ‘치’가 1회 등장하는 문자열을 찾음. ‘치’, ‘치카치카’, ‘치치치’ 해당
{m, n} m회 이상 n회 이하 나타나는 문자 “치{1,2}” ‘치’가 1회 이상 2회 이하 등장하는 문자열을 찾음. ‘치커’, ‘치카치카’ 해당

4.  문자 그룹

패턴 기능 예시 설명
[A-z] 또는
 [:alpha:] 또는
 \a
알파벳 대/소문자인 문자열 찾음 “[A-z]+” 대상 문자열에서 알파벳이 1개 이상인 문자열을 찾음
[ㄱ-ㅎ|ㅏ-ㅣ|가-힣] 한글인 문자열 찾음 “[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]+” 대상 문자열에서 한글이 1개 이상인 문자열을 찾음
[0-9] 또는
 [:digit:] 또는
 \d
숫자인 문자열 찾음 “^[0-9]+"
“^[0-9]+$"
1개 이상의 숫자로 시작하는 문자열 찾음
1개 이상의 숫자로 시작하고 끝나는 문자열 찾음 

참조

  1. https://docs.python.org/3/library/re.html#re-syntax
  2. https://tlsdnjs12.tistory.com/36
  3. https://yurimkoo.github.io/analytics/2019/10/26/regular_expression.html
  4. https://eblee-repo.tistory.com/40
  5.  
  6.  
  7.  
  8.