정규식으로 숫자에 컴마 넣기

숫자 924234656를 컴마가 들어가는 형태로 포맷팅하는 함수를 작성하려다가, 정규식으로 할 수 있음을 깨달았다.

패턴은 다음과 같다.

(?<=d)(?=(?:d{3})+(?!d))
: 설명
(?<=d)  --------------> 앞에 숫자가 하나 있어야 함. (콤마는 맨 앞에 붙지 않음)
           (?=  ----------> 뒤에 다음과 같은 게 와야 하는데, 
               (?:d{3})  -> 숫자 3개와 
                         + -> 숫자 3개짜리 묶음의 연속 (즉 3개의 배수만큼씩)
                           (?!d)  --> 그리고 그 뒤에 숫자가 없어야 함. 
                                   )

파이썬이라면 다음과 같이 쓴다.

참고로 이 패턴에는 look behind가 들어가기 때문에 자바스크립트에서는 적용할 수 없다.

import re

def commae(num):
    num_ = str(num)
    return re.sub(r'(?<=d)(?=(?:d{3})+(?!d))', ',', num_)

print commae(1234567)

https://regex101.com/r/bA3iG7/1