목차
정규표현식 모듈
정규표현식 함수
메타문자 (Metacharacters)
특수구문 (Special Sequences)
Sets (집합) : []기호 안 문자 집합
findall() 함수 - 모두 검색
search() 함수 - 단일 검색
split() 함수 - 분할
sub() 함수 - 교체
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 = "Homzza ng .c om"
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 = "홈짱닷컴 Hom zzang.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 = "홈짱닷컴 Homzz ang.com"
x = re.findall("omz{2}", txt)
print(x)
결과값: ['omzz']
| : 또는
(예) "om|zz" : 'om' 또는 'zz' 반환.
import re
txt = "홈짱닷컴 Homzz ang.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 = "홈짱닷컴 Hom zzang.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 = "홈짱닷컴 Hom zzang.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
주소 복사
랜덤 이동
최신댓글