"Life is too short, You need python"
업무 자동화를 하다 보면 Page에서 읽어오는 숫자 특히 금액과 관련된 숫자에는 천 단위 구분 기호인 ',' 또는 금액 단위인 'KRW'나 'USD' 등의 통화 단위가 딸려오는 경우가 종종 있습니다. 이때 Data Type은 String으로 정의되는데 문자열(String)에서 숫자(Integer)만 추출 또는 분리해 내는 방법에 대해 소개드리겠습니다.
re - 정규식 연산 ( Regular Expression Operations )
정규식 연산을 하기 위해 re 모듈을 import 해야 합니다.
import re
그리고 정규 표현식(Regular Expression)에 대한 약간의 공부도 필요합니다.
정규 표현식에 대한 자세한 설명이 필요하신 분은 아래 링크에서 확인 바랍니다.@
re.sub() 정규 표현식을 이용한 문자열 치환 : 모든 숫자들을 1개의 문자열로 추출
re.sub( pattern, repl, string ) : String에서 Pattern에 해당하는 부분을 repl로 치환
( Input )
import re
string = '12,356,343 KRW, *&#@1234we'
numbers = re.sub(r'[^0-9]', '', string)
print(numbers)
print(type(numbers))
print(numbers + numbers)
( Output )
123563431234
<class 'str'>
123563431234123563431234
숫자를 제외한 모든 문자(특수문자, 공백 등 포함)가 사라지고 숫자만 남아있는 것을 확인하실 수 있습니다. 하지만 여전히 'str' type이기 때문에 덧셈 연산 시 문자열 연산(&)이 되는 것을 확인하실 수 있습니다.
그렇기 때문에 숫자로 활용하기 위해서는 아래와 같이 '숫자형(int)'으로 데이터 타입을 변경해 주어야 합니다.
( Input )
numbers = int(numbers)
print(type(numbers))
print(numbers + numbers)
( Output )
<class 'int'>
247126862468
re.findall() / r'\d+' 연속된 숫자들을 List로 반환
re.findall( pattern, string ) : String에서 Pattern에 해당하는 정규식을 찾아 List로 반환합니다.
( Input )
import re
string = '12,356,343 KRW, *&#@1234we'
numbers = re.findall(r'\d+', string)
print(numbers)
print(type(numbers))
print(type(numbers[0]))
print(numbers[0] + numbers[1])
'r\d+'는 1회 이상 반복되는 숫자들을 표현한 정규식입니다.
( Output )
['12', '356', '343', '1234']
<class 'list'>
<class 'str'>
12356
결과에서 볼 수 있듯 List 형태로 반환되고 각각의 원소들은 'str' type입니다.
re.findall() / r'\d' 각각의 숫자들을 List로 반환
정규식에서 '+'를 제외하면 숫자 단위로 추출되어 List로 반환됩니다.
( Input )
import re
string = '12,356,343 KRW, *&#@1234we'
numbers = re.findall(r'\d', string)
print(numbers)
print(type(numbers))
print(type(numbers[0]))
print(numbers[0] + numbers[1])
( Output )
['1', '2', '3', '5', '6', '3', '4', '3', '1', '2', '3', '4']
<class 'list'>
<class 'str'>
12
데이터 타입 또한 위와 동일합니다.
마무리
문자열(String)에서 숫자(Integer)만 추출 또는 분리해 내는 방법에 대해 알아보았습니다.
'PYTHON > Tips' 카테고리의 다른 글
(5min. Python) __file__의 의미 (현재 실행 중인 file path 반환) (0) | 2022.07.04 |
---|---|
(5min. Python) 데이터 Type 확인 - type(), isinstance() (0) | 2022.07.04 |
(Python/OS) Absolute & Relative Path(절대 경로 & 상대 경로), getcwd(), chdir(path) (0) | 2022.06.30 |
(5min. Python) Round, Ceil, Floor ( 반올림, 올림, 내림 ) and trunc ( 그리고 버림 ) (0) | 2022.06.29 |
(5min. Python) Slice / Slicing, 슬라이싱의 이해 ( ASCII art diagram ) (0) | 2022.06.28 |