숫자 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)