본문 바로가기

Python

파이썬 Python 정규식 regular expression

반응형

개요

 

문자열에서 내가 원하는 정보만을 추출해 낼 때, 정규식 (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(메타 문자)들이다.

반응형