• 회원가입
  • 로그인
  • 구글아이디로 로그인

[basic] Python - RegEx (정규식) - 정규표현식

857  

목차

  1. 정규표현식 모듈
  2. 정규표현식 함수
  3. 메타문자 (Metacharacters)
  4. 특수구문 (Special Sequences)
  5. Sets (집합) : []기호 안 문자 집합
  6. findall() 함수 - 모두 검색
  7. search() 함수 - 단일 검색
  8. split() 함수 - 분할
  9. sub() 함수 - 교체
  10. Match 객체 - 일치하는 검색결과


※ 정규식 (RegEx) : 정규표현식 (Regular Expession)  축약 표현.
※ 정규식 : 검색 패턴을 형성하는 일련의 문자.
※ 정규식으로 문자열에 지정 검색 패턴 포함 여부 확인 가능.


 

정규표현식 모듈

re 내장 패키지 가져오면 정규식 이용 가능.

 

import re

 


[예제] '홈짱'으로 시작하고, 'com'으로 끝나는 문자열 존재 체크.

 

import re


txt = "홈짱닷컴 Homzzang.com"

x = re.search("^홈짱.*com$", txt)

 

print(x)

if x:

  print("일치 존재 O")

else:

  print("일치 존재 X")

 

결과값:

<re.Match object; span=(0, 17), match='홈짱닷컴 Homzzang.com'>

일치 존재 O

 

정규표현식 함수 

 

findall()

모든 일치 항목 포함하는 List 반환.


search()

문자열에 일치 항목 있으면 Match 개체 반환.


split()

문자열 일치할 때마다 분할된 List 반환.


sub()

하나 이상의 일치 항목을 문자열로 대체.

 

※ 아래서 자세히 설명.

 

메타문자 (Metacharacters)

[]  :  문자 집합 

(예) "[a-h]" : 소문자 a부터 h까지 문자 반환.

 

import re

txt = "Homzzang.com"

x = re.findall("[a-h]", txt)

print(x)

 

결과값: ['a', 'g', 'c']


\  : ① 특수 의미 신호. ② 특수문자 회피.

(예) "\d" : 0~9 숫자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("\d", txt)

print(x)

 

결과값: ['2', '0', '1', '2']


.  :  문자 1글자. (개행 문자 제외) 

(예) "Hom..ang" : 'Hom'과 'ang' 사이에 문자 2개인 문자열 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("Hom..ang", txt)

print(x)


결과값 : ['Homzzang']


^  :  시작 부분.
(예) "^Hom" : 문자열 시작 부분의 'Hom'  반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("^Hom", txt)

print(x)

 

결과값: []


$  :  끝 부분. 

(예) "com$" : 문자열 끝의 'com'  반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("com$", txt)

print(x)

 

결과값: ['com']


*  :  0개 이상. 

(예) "oms* : 'om' 뒤에 's' 문자가 0개 이상인 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("oms*", txt)

print(x)

 

결과값: ['om', 'om']


+  : 1개 이상.

(예) "oms+" : 'om' 뒤에 's' 문자가 1개 이상인 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("oms+", txt)

print(x)

 

결과값: []


{n}  :  n

(예)  "omz{2}" : 'om' 뒤에 'z'가 정확히 2개인 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("omz{2}", txt)

print(x)


결과값: ['omzz']


|  : 또는

(예) "om|zz" : 'om' 또는 'zz' 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("om|zz", txt)

print(x)

 

결과값: ['om', 'zz', 'om']


()  :  캡처 및 그룹

 

예제 준비 중.

 

 

특수구문 (Special Sequences)

\A  :  문자열 시작의 지정 문자 반환.
(예) "\A홈짱" : 문자열 시작의 '홈짱' 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("\A홈짱", txt)

 

print(x)

 

결과값: ['홈짱']


\b  :  지정 문자가 단어의 시작 (또는 끝)에 있는 일치 항목 반환.

※ "r" 역할 : 문자열이 "원시 문자열"로 취급되는지 확인.

 

(예1) r"\bHom" : 단어 시작의 'Hom' 반환.

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall(r"\bHom", txt)

print(x) # ['Hom']

 

(예2) r"Hom\b" : 단어 끝의 'Hom' 반환.

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall(r"Hom\b", txt)

print(x) # []

 


\B  :  지정 문자 있지만, 단어 시작 (또는 끝) 아닌 일치 항목 반환.

 ※ "r" 역할 : 문자열이 "원시 문자열"로 취급되는지 확인.

 

(예1) r"\BHom" : 단어 시작 아닌 곳의 'Hom'  반환.

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall(r"\BHom", txt)

print(x) # []

 

(예2) r"Hom\B" : 단어 끝 아닌 곳의 'Hom'  반환.

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall(r"Hom\B", txt)

print(x) # ['HOM']

 


\d  : 문자열에 숫자 (0~9의 숫자) 일치 항목 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("\d", txt)

print(x)

 

결과값: ['2', '0', '1', '2']


\D  :  문자열에 숫자 (0~9 숫자) 아닌 일치 항목 반환.


import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("\D", txt)

print(x)

 

결과값:

['홈', '짱', '닷', '컴', ' ', 'H', 'o', 'm', 'z', 'z', 'a', 'n', 'g', '.', 'c', 'o', 'm', ' ']


\s  :  '공백' 반환.


import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("\s", txt)

print(x)

 

결과값: [' ', ' '] 


\S : 공백 아닌 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("\S", txt)

print(x)

 

결과값: ['홈', '짱', '닷', '컴', 'H', 'o', 'm', 'z', 'z', 'a', 'n', 'g', '.', 'c', 'o', 'm', '2', '0', '1', '2']


\w  :  (a~Z) 문자, (0~9) 숫자, (_) 언더바 중 일치 항목 반환.


import re

txt = "홈짱닷컴_Homzzang.com_2012"

x = re.findall("\w", txt)

print(x)

 

결과값: 

['홈', '짱', '닷', '컴', '_', 'H', 'o', 'm', 'z', 'z', 'a', 'n', 'g', 'c', 'o', 'm', '_', '2', '0', '1', '2']


\W :  (a~Z) 문자, (0~9) 숫자, (_) 언더바 아닌 일치 항목 반환.

 

import re

txt = "홈짱닷_Homzzang.com_2012"

x = re.findall("\W", txt)

print(x)

 

결과값: ['.']


\Z  :  문자열 끝의 지정 문자 반환.

(예) "Hom\Z" : 문자열 끝의 'Hom' 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("Hom\Z", txt)

print(x)

 

결과값: [] 

 

Sets (집합) : []기호 안 문자 집합

 

[ ] 기호 안의 특별한 의미 갖는 문자 집합 의미.

 


[abc]  :  a, b, c 중 하나와 일치하는 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("[abc]", txt)

print(x)

 

결과값: ['a', 'c']


[a-c]  :  a와 c사이 소문자 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("[a-c]", txt)

print(x)

 

['a', 'c']


[^abc]  :  a, b, c 제외한 문자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com"

x = re.findall("[^abc]", txt)

print(x)

 

결과값: ['홈', '짱', '닷', '컴', ' ', 'H', 'o', 'm', 'z', 'z', 'n', 'g', '.', 'o', 'm']


[0123]  :  0, 1, 2, 3 과 일치하는 숫자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("[123]", txt)

print(x)

 

결과값: ['2', '1', '2']


[0-9]  :  0~9 사이 숫자 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("[0-9]", txt)

print(x)


결과값: ['2', '0', '1', '2']


[0-3] [0-5]  :  00~35 사이 두 자리 숫자 반환.

※ 십자리 0~3, 일자리 0~5

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("[0-3][0-5]", txt)

print(x)

 

결과값: ['20', '12']


[a-zA-Z]  :  a~z 소문자나 A~Z 대문자 알파벳 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("[a-zA-Z]", txt)

print(x)

 

결과값: ['H', 'o', 'm', 'z', 'z', 'a', 'n', 'g', 'c', 'o', 'm']


[+]  :  + 특수문자 반환.

※ 집한 안의 +, *, ., |, (), $, {}는 의미 없음. (걍, 특수문자.)

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("[+*.|()${}]", txt)

print(x)

 

결과값: ['.']

 

findall() 함수 - 모두 검색

 

모든 일치 항목을 발견 순으로 List 반환.

 


[예제1] 발견되면, 발견된 순으로 List 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("om", txt)

print(x)

 

결과값: ['om', 'om']


[예제2] 발견 안 되면, 빈 List 반환.

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.findall("sinbi", txt)

print(x)

 

결과값: [] 

 

search() 함수 - 단일 검색

 

일치 값 검색 후, 가장 첫 번째 일치하는 Match 객체 반환.

※ Match 객체의 start() 메서드 이용해 색인번호 확인.

 


[예제1] 일치 값 있으면 첫 번재 일치 Macth 객체 반환

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.search("\s", txt)

print(x) # <re.Match object; span=(4, 5), match=' '>

print("첫 번째 공백 위치:", x.start()) # 4


첫 번째 공백 위치: 4


[예제2] 일치 값 없는 경우, None 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.search("sinbi", txt)

print(x)

 

결과값: None

 

 

split() 함수 - 분할

 

일치할 때마다 문자열 분할 후, List로 반환.

 


[예제] 공백 기준으로 문자열 자른 후, List 생성.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.split("\s", txt)

print(x)


 

결과값: ['홈짱닷컴', 'Homzzang.com', '2012']


[예제2] maxsplit 매개변수 추가해 분할 횟수 설정 가능.

(예) 1회만 분할. (즉, 첫 번째 공백 기준으로만 분할.)

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.split("\s", txt, 1)

print(x)

 

결과값: ['홈짱닷컴', 'Homzzang.com 2012']

 

 

sub() 함수 - 교체

 

일치 값을 지정 텍스트로 교체(= 변경).

count 매개변수로 교체 횟수 지정 가능. (예제2)

 


[예제1] 공백을 언더바로 변경.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.sub("\s", "_", txt)

print(x)

 

결과값: 홈짱닷컴_Homzzang.com_2012


[예제2] count 매개변수로 교체 횟수 지정.

(예) 1회만 교체. (즉, 첫 번째 것만 교체.)

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.sub("\s", "_", txt, 1)

print(x)

 

결과값: 홈짱닷컴_Homzzang.com 2012

 

 

Match 객체 - 일치하는 검색결과

※ search() 함수는 검색 결과 담긴 Match 객체 반환. 

※ 일치값 없으면, None 반환.

※ Match 객체엔 검색 결과 정보 검색 위한 속성・메서드 존재.


Match.span() 메서드

일치값의 시작과 끝 위치로 구성된 튜플 반환.


Match.string 속성

함수에 전달된 문자열 반환.


Match.group()

일치 문자열 반환.

 


re.search() 메서드 : 일치하는 첫 번째 Match 객체 반환.

[예제]

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.search("\s", txt)

print(x)

 

결과값: <re.Match object; span=(4, 5), match=' '> 


Match.span() 메서드 - 일치값의 (시작, 끝) 색인 담긴 Tuple 반환.

[예제] H로 시작하는 단어의 (시작, 끝) 색인 반환.


import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.search(r"\bH\w+", txt)

print(x.span()

 

결과값: (5, 13)


Match.string 속성 - search() 함수에 전달된 문자열 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.search(r"\bH\w+", txt)

print(x.string

 

결과값: 홈짱닷컴 Homzzang.com 2012


Match.group() 메서드 - 일치 문자열 반환.

[예제] H로 시작하는 단어 반환.

 

import re

txt = "홈짱닷컴 Homzzang.com 2012"

x = re.search(r"\bH\w+", txt)

print(x.group())

 

결과값: Homzzang 


 

 


분류 제목
basic Python - Lambda (람다함수) - 작은 1회용 익명함수
basic Python - Array (배열)
basic Python - Class/Object (클래스/객체) ※ __init__() 함수
basic Python - Inheritance (상속)
basic Python - Iterator (반복자)
basic Python - Scope (범위)
basic Python - Module (모듈)
basic Python - Datetime (날짜시간) 표시
basic Python - JSON (제이슨)
basic Python - RegEx (정규식) - 정규표현식
basic Python - PIP (피프) - 패키지(모듈) 관리자
basic Python - Try...Except - 에러 테스트/제어. (= 트라이...익세프트)
basic Python - User Input (사용자 입력)
basic Python - String Format (문자열 포맷)
basic Python - Math (수학)
2/2
목록
찾아주셔서 감사합니다. Since 2012