본문 바로가기

정규식24

[기초방] VBA 100제 #44 [ 각종 통화 할인율 구하기 ] 정규식을 이용한 파씽문제이다. 문제에서 한자리 통화기호 + 금액 / 할인율을 파씽하여 그 결과를 도출하는 문제이다. 처음 본인이 했던것은 1그룹(통화기호 + 금액) / 2그룹(할인률) 이렇게 하여 통화기호를 분리하여 계산후 다시 통화기호를 붙히는 작업을 하였는데, 1그룹(통화기호) + 2그룹(금액) + 3급액(할인률) 이렇게 분리하는게 코드가 좀 더 깔끔할 것 같아 수정하였다. 패턴설명은 이렇다. (1그룹 : 숫자앞에 임의의 한자리)+(2그룹:숫자열) [.+? : 의미없는 문자] +(3그룹: 1자리부터3자리의 숫자와 퍼센트기호) With Mat(0) rngA(1, -2) = .submatches(0) & .submatches(1) '= 통화 기호 + 통화 rngA(1, -1) = .submatches(2.. 2023. 3. 17.
[기초방] VBA 100제 #39 [ 문자조합하기 ] 이번 문제는 characters + 정규식 문제의 확장편 정도로 생각해주면 좋을것 같다. 39번 문제는 [이전] 데이터를 보면 알겠지만 처음을 제외하곤 숫자 뒤에 % 가 4자리씩 순환하고 있는데 이걸 나머지 숫자에도 %을 삽입하라는 문제이다. 39-1은 이웃하지 않은 알파벳과 숫자의 조합으로 조합문자를 만들어 내는 것이다. 39번은 정규식으로 풀려면 패턴을 일치시켜야 하기에 정규식 패턴을 다음과 같이 만들어 보았다. 패턴설명은 뒤에 % 가 없는 숫자를 패턴으로 하는 정규식 패턴이다. firstindex는 일치 패턴의 바로 직전까지를 의미하기 때문에 firstindex + cnt를 함으로서 글자가 삽입되더라도 그 위치를 변경해가면서 결국 의도한대로 패턴과 일치된 숫자들 뒤로 % 를 삽입할 수 있다. Set.. 2023. 3. 14.
[기초방] VBA 100제 #37 [ Characters ] 37번 문제인데 38번으로 표기해서 크루인 [시훈아빠]님한테 혼이났다.. 37번으로 알고 가시길... 이문제는 Characters의 매소드중 Insert를 알고 모르고의 차이가 크다.. 이걸 Replace로 하게 되면 코드가 많이 지저분해질것이다. Characters 매소드에 대해선 Characters의 고찰편에서 자세하게 다뤄보도록 하겠다. With Reg .Pattern = "[^\s]+" .Global = True End With 해당 정규식 패턴은 [ 띄어쓰기가 아닌 모든 문자 ] 라는 의미이다. With rngA.Characters(idx, Len(Ma)) If .Font.Color = vbRed Then .Insert ("[" & Ma & "]") End If End With 이 구문은 핵심구.. 2023. 3. 6.
[기초방] VBA 100제 #30_1 [ 폰트처리하기_2(정규식) ] VBA 100제 #30번의 A/s 문제이다. 30번 문제를 Like 함수가 아닌 정규식으로 푼 구문이다. 본인은 처음부터 정규식을 Submatches 통해 문제를 풀어나가려고 했지만, 같은방 크루인 딱총님이 정규식 패턴 풀이와 정규식의 여러 다른 속성을 통한 풀이를 공개하여 함께 소개 하려고 한다. FirstIndex는 패턴과 일치되는 단어가 시작되는 바로 앞까지를 나타내며, Length는 패턴과 일치한 단어의 길이를 뜻한다. 정말 군더더기 없는 깔금한 코드이다. 이 코드는 음... 못이겨~~~ You win 2023. 2. 8.