본문 바로가기
프로그래밍/정규표현식

[정규 표현식] 응용 (2) 숫자인지 아닌지 확인하기 with Python

by 부자 꽁냥이 2022. 10. 13.

얼마 전 파이썬(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())

 

 

코드를 실행하면 위와 같이 숫자를 잘 잡아내는 것을 알 수 있다.


댓글


맨 위로