정규 표현식

Regular Expression. re로 표현한다.
텍스트나 숫자, 특수문자 등으로 이루어진 문자열 패턴을 표현할 때 사용한다.

문자열 내 특정 패턴의 문자의 존재 여부를 확인하거나
이를 추출할 때 사용할 수 있다.

re 모듈

정규표현의 처리를 위한 기능들을 담고 있는 모듈이다.

re 라이브러리 임포트 : import re

메서드 설명 예시
r = re.compile(패턴) 찾을 문자열이나 문자열 패턴(이하 패턴)을 지정한다.
또한 이를 변수에 담을 수 있다.
r = re.compile(‘abcdefabc’)
re.search(패턴, 대상문자열) 대상문자열에서 찾을 패턴의 위치를 반환한다. re.search(‘a’, ‘abc’)
r.search(패턴) 상동 r = re.compile(‘abc’) r.search(‘a’)
re.match(패턴, 대상문자열) 대상문자열의 시작부가 패턴과 동일한지
여부와 위치를 반환
re.match(‘a’, ‘abc’)
r.match(패턴) 상동 r = re.compile(‘abc’) r.match(‘a’)
re.findall(패턴, 대상문자열) 문자열에 패턴과 동일한 문자열을
모두 찾아 리스트로 반환
re.findall(‘abc’, ‘abcdefabc’)
r.findall(패턴) 상동 r = re.compile(‘abcdefabc’) r.findall(‘abc’)
re.finditer(패턴, 대상문자열) findall과 비슷하며, 반환 형식이 iterator이다. re.finditer(‘abc’, ‘abcdefabc’)
r.finditer(패턴) 상동 r = re.compile(‘abcdefabc’) r.finditer(‘abc’)
re.fullmatch(패턴, 대상문자열) 패턴과 꼭 일치하는 문자열의 위치를 반환 re.fullmatch(‘ab..c’, ‘abcdc’)
r.fullmatch(패턴) 상동 r = re.compile(‘ab..c’) r.fullmatch(‘abcdc’)
re.split(패턴, 대상문자열, 최대split수) 대상 문자열을 특정 패턴으로 split 한다. re.split(‘a..d’, ‘bcdabcdbcd’)
re.sub(패턴, 교체할문자열, 대상문자열) 대상문자열에서 패턴에 해당하는
문자열을 교체할 문자열로 바꾼다.
re.sub(‘a.’, ‘bc’, ‘abcab’)

정규 표현식의 표현

기호 설명 예시 예시 해석
. 미정의 어떠한 문자 1개를 뜻함 a.c a로 시작해 c로 끝나면서 중간에 미정의 1개 문자를 포함한 문자열
? 기호 앞에 붙은 문자가 1개이거나 0개인 문자열 ab?c a로 시작해 c로 끝나면서 중간에 b를 1개 혹은 0개 포함한 문자열
* 기호 앞에 붙은 문자가 0개 이상의 n개인 문자열 ab*c a로 시작해 c로 끝나면서 중간에 b를 n개 포함한 문자열
+ 기호 앞에 붙은 문자가 1개 이상인 문자열 ab+c a로 시작해 c로 끝나면서 중간에 b를 1개 이상 포함한 문자열
^ 기호 뒤에 붙은 문자열로 시작되는 문자열을 뜻함 ^ab ab로 시작되는 문자열
{숫자} 기호 앞에 붙은 문자가 특정 숫자만큼 반복되는 문자열 ab{2}c a로 시작해 c로 끝나면서 중간에 b를 2개 포함한 문자열
{min, max} 기호 앞에 붙은 문자가 min ~ max개 반복되는 문자열 ab{1,3}c a로 시작해 c로 끝나면서 중간에 b를 1개 혹은 2개 혹은 3개 포함한 문자열
{min,} 기호 앞에 붙은 문자가 min개 이상 반복되는 문자열 ab{3,}c a로 시작해 c로 끝나면서 중간에 b를 3개 이상 포함하는 문자열
[문자1-문자2] 기호 앞 뒤로 붙은 문자1 ~ 문자2
사이에 해당하는 문자로 이루어진 문자열
A-z 영문자로 된 문자열
[^문자열] 꺽쇠 뒤에 붙은 문자열로 시작하지 않는 문자열 [^ab] ab로 시작하지 않는 문자열
| or를 뜻함. 여러 패턴을 뜻할 때 사용할 수 있다. [^a]|[A-z] a로 시작하지 않는 영문자로 이루어진 문자열
\d 숫자(digit) \d 숫자
\특수문자 특수문자를 문자 그 자체로 표현하는 방법 \+ 기호 +의 문자 그 자체
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#예시 : 숫자만 뽑아내기
text = '홍길동 / 연락처 : 010-1234-5678 / 나이 : 67'
re.findall('\d+', text)
"==> 출력 : ['010', '1234', '5678', '67']"

#예시 : 영문만 뽑아내기
text = '라고 AP통신은 전했다. ABC뉴스 홍길동기자 hong@ABCNEW.com'
re.findall('[a-zA-Z]+', text)
"==> 출력 : ['AP'. 'ABC', 'hong', 'ABCNEW', 'com']

#예시 : 한글(음절 이상)만 뽑아내기
text = '안녕 hong! ㅋㅋㅋ'
re.findall('[가-힣]+', text)
"==> 출력 : ['안녕']

#예시 : 한글만 뽑아내기
text = '안녕 hong! ㅋㅋㅋ'
re.findall('[ㄱ-힣]+', text)
"==> 출력 : ['안녕', 'ㅋㅋㅋ']

레퍼런스

https://ko.wikipedia.org/wiki/정규표현식