정규 표현식
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)
"==> 출력 : ['안녕', 'ㅋㅋㅋ']