정규표현식, 의미를 밝혀 작성하도록 연습하기 with 프로그래머스 예제

Chloé·2022년 5월 12일
0

튜플 in 프로그래머스

2019 카카오 개발자 겨울인턴십 기출
https://programmers.co.kr/learn/courses/30/lessons/64065

정규표현식 찾아내기

/[0-9,]+/g

  • {}로 감싸인 내부만 찾아내기 위해 숫자와 쉼표가 연속되는 부분을 찾아주었다.
    쉼표만 있는 부분도 함께 추출됐다. 반드시 하나 이상의 숫자로 시작하는 부분을 추가해주어야 한다!

/([0-9]{1,}[,0-9]?)+/g

  • (하나 이상의 숫자에, 쉼표와 숫자가 뒤이어 올 수도 있는) 덩어리가 반복되는 것을 찾아낸다. 색칠된 부분을 보면 연속된 문자열을 한 덩어리로 보지 않고 덩어리를 나누어 인식하되, 반복되는 것으로 찾는 것을 볼 수 있다.

/[0-9]{1,}([,0-9]?)+/g

  • (하나 이상의 숫자로 시작하고) (쉼표와 숫자가 여러 덩어리 올 수도 있는) 것으로 찾아보았다. 원하는 문자열을 한 덩어리로 인식한다! 의도에 조금 더 가까워진 것 같다.

/[0-9]([,0-9]?)+/g

  • 뒷부분에서도 숫자가 반복되기 때문에, (하나 이상의) 조건을 지워보았다. 마찬가지로 작동한다. 20 , 1 1 12 0 , 1 1 1 의 차이라고 생각한다.

의미적으로 표현해보기

찾아내고자 하는 부분은 다 찾아냈지만, 정규표현식만 보고도 내가 찾아내고자 했던 부분을 의미적으로 이해할 수 있도록 표현하고 싶어서 조금 더 다듬어보았다.

원래 찾고 있던 것은 "한 자릿수 이상의 숫자"들이, "하나 이상일 경우 쉼표로 연결되어 있는" 것이므로!

즉, "숫자" + (", 숫자" + ", 숫자" + ...)
"숫자" + (", 숫자"의 반복) 을 찾아내고 싶었다!

/[0-9]([,]?[0-9]?)+/g

  • 숫자로 시작하고, 뒤에 (쉼표와 숫자)가 여러 개 오거나 오지 않는 것을 표현하고 싶었다. 원하는 결과값을 얻긴 하지만 정확한 표현은 아니라고 생각했다.

/[0-9]{1,}(,[0-9]{1,})+/g

  • 하나 이상의 숫자로 시작하고 (두 자릿수 이상의 숫자를 한 덩어리로 읽어내고)
  • 이 다음에는 ", 한 자릿수 이상의 숫자"가 한 번 이상 반복되는 (+)
    의 조건으로 찾아보았더니 숫자 하나만 존재하는 경우를 빠뜨렸다.

/[0-9]{1,}(,[0-9]{1,})*/g

  • 하나 이상의 숫자로 시작하고 (두 자릿수 이상의 숫자를 한 덩어리로 읽어내고)
  • 이 다음에는 ", 한 자릿수 이상의 숫자"가 0번 또는 그 이상 반복되는 (*)
    의 조건으로 정확히 원하는 부분을 찾아서 표현할 수 있었다.
profile
클로이 데일리 로그

0개의 댓글