Programming/Python

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

psychoria 2018. 9. 14. 21:00
반응형

파이썬의 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+)?)$)')

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

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

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

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

반응형