얼마 전 파이썬(Python) 코딩을 하다가 해당 문자열이 숫자인지 아닌지 확인하는 정규 표현식을 만들어야 했다. 이 내용을 공유하면 좋을 것 같아서 이번 포스팅에서 그 방법을 알아보기로 한다.
문자열이 숫자인지 아닌지 확인하기
찾고자 하는 숫자 문자열이 다음과 같다.
2.3, 23, -23.02, .25, -.27
지난 포스팅에서 정규 표현식을 만들어가는 방법에는 White List와 Black List 방식이 있다고 했다. 이번 문제에서는 Black List 방식으로는 표현식이 매우 복잡할 것이다. 왜냐하면 포함되면 안 되는 문자들이 너무 많기 때문이다(알파벳, 특수문자 !@#$ 등). 따라서 White List 방식으로 정규 표현식을 만들고자 한다.
1 단계)
먼저 음수 부호가 맨 앞에 포함되거나 안될 수 있으며 포함된다면 한 번만 나타나야 한다. 따라서 '-?' 패턴이 앞에 나와야 할 것이다.
2 단계)
소수점은 없어도 되고 있어도 된다. 만약 소수점이 있다면 중심으로 좌우에 숫자가 하나씩은 기본적으로 나와야할 것이다. 따라서 이를 나타내는 '\d+\.?\d+' 패턴이 있어야 할 것이다. 지금까지 종합하면 정규 표현식 '-?\d+\.?\d+'이 완성되었다.
지금까지 만든 것을 토대로 정규 표현식 테스트 사이트에 가서 확인해보자. 나는 regex101.com을 사용한다.
잘 작동하는 것 같지만. 25나 -.27을 잡아내지 못한다. 소수점 왼쪽에 숫자가 없어도 된다는 것을 반영해야 한다. 따라서 수량 메타 문자 +를 *으로 바꿔준다. 이제 최종 정규 표현식은 다음과 같다.
'-?\d*\.?\d+'
이제 코드를 통해서 확인해보자.
import re
pattern = r'-?\d*\.?\d+'
string_list = ['2.3','23', '-23.02', '.25', '-.27']
for string in string_list:
print(re.match(pattern, string).group())
코드를 실행하면 위와 같이 숫자를 잘 잡아내는 것을 알 수 있다.
'프로그래밍 > 정규표현식' 카테고리의 다른 글
[정규 표현식] 탐욕 수량자(Greedy Match)와 게으른 수량자(Lazy, Non-greedy Match) (0) | 2022.10.26 |
---|---|
[정규 표현식] 응용 (1) URI(URL)에서 정보 가져오기 with Python (2) | 2022.10.11 |
[정규 표현식] re 모듈 알아보기 (3) finditer 사용법과 findall과의 차이 (0) | 2022.10.01 |
[정규 표현식] 역 참조(Back reference) 알아보기 (0) | 2022.10.01 |
[정규 표현식] re 모듈 알아보기 (2) 대체하기 (feat. re.sub) (0) | 2022.09.30 |
댓글