개요
문자열에서 내가 원하는 정보만을 추출해 낼 때, 정규식 (regular expression)을 사용하면 편리하다.
문제
다음과 같은 문자열 S가 있다고 하자.
2022-07-28 14:06:24;[DEBUG] Epoch 9 학습시작. LR=[2.4471741852423235e-05]
S에는 epoch에 대한 정보와 LR에 대한 정보가 담겨있다.
즉, epoch=9, LR=2.44... 이다.
S를 파싱해서 이 정보들만을 추출해 보도록 하자.
구현
- 정규식을 이용하려면 모듈 re가 필요하다.
import re
- 정보를 담고 있는 문자열 S를 만든다.
S = '2022-07-28 14:06:24;[DEBUG] Epoch 9 학습시작. LR=[2.4471741852423235e-05]'
- 추출하고 싶은 정보가 무엇인지, 정규식으로 표현한다.
regex = re.compile(r'Epoch (\d+)')
. Epoch 이라는 문자열이 있고,
. \d 는 0 ~ 9까지의 숫자를 의미
. \d+ 는 1개 이상의 숫자로 구성된 문자열을 의미
. (\d+) 는 ( )는 내가 추출을 원하는 정보임을 표시
. regex에는 추출하고자 하는 것이 무엇인지에 대한 정보가 담긴다.
- regex를 이용해서 S를 검색한다.
matchobj = regex.search(S)
. matchobj에는 추출 결과들이 담겨있다.
- matchobj에서 내가 원하는 정보만을 꺼내면 된다.
epoch = int(matchobj.group(1))
. matchobj.group(1)은 추출된 것 중에서 첫 번째 정보를 의미한다.
. int ( ...) 는 추출된 것이 문자열이기 때문에 정수로 변환
- 이번에는 LR 정보를 추출하기 위한 정규식을 만들어 보자
regex = re.compile(r'LR=\[(.+)\]')
. \[, \]는 양 옆의 괄호 문자를 의미한다.
. .(period)는 모든 문자를 의미
. .+ : 1개 이상의 모든 문자.
- LR을 추출하는 코드는 위와 동일하다.
matchobj = regex.search(S)
lr = float(matchobj.group(1))
. float( )는 추출된 문자열을 실수로 바꾸어주는 것이다.
아래는 regular expression(정규식)에서 사용되는 meta characters(메타 문자)들이다.
'Python' 카테고리의 다른 글
EasyDict에 대해 알아보자. (0) | 2024.12.21 |
---|---|
Python dictionary unpacking 딕셔너리 언팩킹 ** (0) | 2022.07.31 |
Python tuple unpacking 파이썬 튜플 언팩킹 (0) | 2022.07.31 |
네이버 실시간 검색어를 자동 추출하는 방법 (0) | 2017.05.03 |