1. 정규 표현식
- 정규 표현식(정규식)이란 프로그래밍에서 문자열을 다룰 때 문자열의 일정한 패턴을 표현하는 일종의 형식 언어
- regular expression을 줄여 일반적으로 regex라 표현
- 정규 표현식은 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 프로그래밍에서 사용되는 공통 문법
2. 정규 표현식 활용
[ '동 기업의 매출액은 전년 대비 29.2% 늘어났습니다.' ] 라는 문장에서 '29.2%'를 추출해보자.
import re
data = '동 기업의 매출액은 전년 대비 29.2% 늘어났습니다.'
re.findall('\d + .\d + %', data)
3. 정규 표현식의 종류
- 대괄호([ ])는 문자 클래스로써 대괄호 안에 포함된 문자들 중 하나와 매치를 뜻함
- 'apple', 'blueberry', 'coconut'이 정규 표현식이 [ae]와 매치 여부
- 'apple'에는 정규 표현식 내의 a와 e가 모두 존재하므로 매치됨
- 'blueberry'에는 e가 존재하므로 매치됨
- 'coconut'에는 a와 e 중 어느 문자도 포함하고 있지 않으므로 매치되지 않음
- 만일 [ ] 안의 두 문자 사이에 하이픈(-)을 입력하면 두 문자 사이의 범위를 의미
- [a-e]라는 정규 표현식은 [abcde]와 동일하며,
- [0-5]는 [012345]와 동일
- [a-z]는 알파벳 소문자를, [A-Z]는 알파벳 대문자를, [a-zA-Z]는 모든 알파벳을, [0-9]는 모든 숫자를 뜻함
- [ ] 안의 ^는 반대를 뜻함
- [^0-9]는 숫자를 제외한 문자만 매치를, [^abc]는 a, b, c를 제외한 모든 문자와 매치를 뜻함
정규 표현식 | 내용 |
\d | 숫자와 매치, [0-9]와 동일한 표현식 |
\D | 숫자가 아닌 것 매치, [^0-9]와 동일한 표현식 |
\s | whitespace(공백) 문자와 매치, [\t\n\r\f\v]와 동일 |
\S | whitespace(공백) 문자가 아닌 것과 매치, [^\t\n\r\f\v]와 동일 |
\w | 문자+숫자와 매치, [a-zA-Z0-9]와 동일 |
\W | 문자+숫자가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일 |
* 대문자로 표현된 문자 클래스는 소문자로 표현된 것의 반대
4. 정규 표현식과 관련된 메서드
- match() : 시작 부분부터 일치하는 패턴을 찾음
- search() : 첫 번째 일치하는 패턴을 찾음
- findall() : 일치하는 모든 패턴을 찾음
- finditer() : findall()과 동일하지만 반복 가능한 객체를 반환
5. 정규 표현식 메서드 활용
import re
# re.compile()을 통해 정규 표현식을 컴파일하여 변수에 저장한 후 사용할 수 있음
p = re.compile('[a-z]+') # 모든 소문자
type(p)
m = p.match('python')
m
m.group() # 매치된 단어만 추출
# 대문자('U')로 시작하므로 매치되지 않음
print(p.match('Use python'))
print(p.match('PYTHON'))
p = re.compile('[A-Z]+') # 모든 대문자
p.match('PYTHON')
p = re.compile('[가-힣]+') # 모든 한글
m = p.match('파이썬')
m
p = re.compile('[a-z]+') # 모든 소문자
m = p.search('python')
m = p.search('Use python')
print(m)
p = re.compile('[a-zA-Z]+') # 모든 알파벳
m = p.findall('Life is too short, You need Python')
print(m) # '.'이나 ','는 매치되지 않음
# 반복 가능한 객체를 반환
p = re.compile('[a-zA-Z]+') # 모든 알파벳
m = p.finditer('Life is too short, You need Python')
print(m)
# for문을 통해 하나씩 출력 가능
for i in m:
print(i)
import re
# 로또 번호 추출
num = """r\n\t\t\t\t\t15\t\t\t23\t\t\t29\r\n\t\t34\r\n\t\t40\r\t\t44\r"""
p = re.compile('[0-9]+') # 모든 숫자
m = p.findall(num)
print(m) # 당첨 번호에 해당하는 숫자만 추출
# 날짜 추출
dt = '> 오늘의 날짜는 2022.12.31 입니다.'
p = re.compile('[0-9]+.[0-9]+.[0-9]+') # 숫자.숫자.숫자
m = p.findall(dt)
print(m)
p = re.compile('[0-9]+') # 숫자
m = p.findall(dt)
print(m)
'.'.join(m)
'Python > 퀀트' 카테고리의 다른 글
크롤링 실습: 국내 주식 섹터 데이터 크롤링 (1) | 2024.11.06 |
---|---|
크롤링 실습: 국내 주식 티커 데이터 크롤링 (4) | 2024.11.05 |
크롤링 실습: 셀레니움을 이용한 동적 크롤링 실습하기 (3) | 2024.11.05 |
정적 크롤링과 동적 크롤링의 차이 (0) | 2024.11.05 |
크롤링 실습: POST 방식 데이터 수집하기 (0) | 2024.11.05 |
댓글