본문 바로가기

Programming/Python

파이썬 정규표현식으로 쉼표(콤마, Comma)가 있는 숫자 찾기

반응형

파이썬의 re 모듈은 정규표현식(Regular Expression, regex)을 담당합니다.

정규표현식은 이메일이나 IP 주소의 유효성 등에 활용이 가능합니다.

그리고 다양한 패턴에 따라서 파일명을 바꾼다거나 하는데도 활용할 수 있습니다.

여기서 알아볼 정규표현식 활용 방법은 쉼표로 구분된 숫자를 추출하는 것입니다.

일반적으로 3자리마다 쉼표로 구분하는 숫자 표기방식을 찾는 방법입니다.

쉼표로 구분되는 숫자는 다음과 같은 형식의 숫자입니다.

  • 45,123
  • -12,345.01
  • 54,321.23
  • 123,456,789

파이썬 정규표현식으로 표현하면 다음과 같습니다.

import re


def check_number(text):
    regex = re.compile(r'((-)?\d{1,3}(,\d{3})*(\.\d+)?)')

    search = regex.search(text)
    if search:
        print('%s is a number!!' % search.group(1))
    else:
        print('%s is not a number!!' % text)

이 정규표현식으로 쉼표로 구분되는 숫자를 추출할 수 있습니다.

먼저 음수 기호를 확인((-)?)합니다.

이후에 1~3자리의 숫자(\d{1, 3})를 먼저 확인하고 쉼표로 구분되는 3자리 숫자((,\d{3})*)를 확인합니다.

마지막으로 소수점 부분((\.\d+)?)을 확인합니다.

음수 기호나 소수점 부분은 있거나 없을 수 있기 때문에 ? 기호를 사용합니다.

일반적인 숫자 형식은 위 정규표현식으로 충분히 찾아낼 수 있습니다.

다만 위 정규표현식으로는 0으로 시작하는 숫자를 그대로 숫자로 인식하게 됩니다.

  • 012,345.567

해당 문제를 해결하기 위해서 다음과 같이 수정할 수 있습니다.

regex = re.compile(r'(^((-)?([1-9]([0-9]{0,2})?(,\d{3})*|0)(\.\d+)?)$)')

이제 정상적인 숫자가 아니면 숫자가 아니라고 표시됩니다.

앞에 ^뒤의 $가 추가되면서 앞이나 뒤에 공백 등이 포함되도 숫자로 인식하지 않습니다.

문자열의 공백 등을 미리 제거하고 함수를 호출하면 됩니다.

이 정규표현식을 활용해서 %나 $ 등이 포함된 문자열에서 숫자만 추출하는 것이 가능합니다.

반응형