카테고리 없음

문자열 파싱의 끝판왕 정규식에 대한 자세한 설명 1

realnotepad 2024. 8. 24. 17:55

안녕하세요 
오늘은 정규식에 대해 설명하려고 합니다
엑셀 데이터 가공이 힘들게 느껴지시는 분들이라면 아래 글 중 예제가 포함된 부분만 읽어주셔도
대부분의 문제는 해결이 됩니다
초보자들분들 쉽게 따라하게 작성하였으니,
너무 어렵게 생각하지 마시고 천천히 읽어보시길 권해드립니다🙏


정규 과정에 대한 흐름도

 

정규식도 정규표현식(Finite Automaton) 엔진 구간에서
여러개의 방식으로 나뉩니다 사실 몰라도 되는 부분이라서 평소에 정규식에 대한 관심이 많아서 고찰을 하시는분이면 한번 쯤 훑어보는 것을 추천드립니다
정규식은 패턴에 대한 이해만 있으면 누구나 쉽게 사용할 수 있습니다
탐색 방법은 크게 전방탐색과 후방 탐색으로 나뉩니다

디폴트값은 전방탐색이고 후방 탐색은 사용처가 많이 없고 뒤죽박죽 집중도가 분산될 수 있기 때문에 심화과정을 따로 한번 더 포스팅 하도록 하겠습니다

 

많이 사용하는 패턴

 

  • .* : 어떤 데이터든 탐색
  • (.*) :  SubMatches를 하기위함
  • [a-z] : -소문자를 탐색 , A-Z는 대문자
  • [가-힣] : 한글을 탐색
  • \d : 숫자를 탐색
  • [^\d] : 숫자가 아닌 것을 모든 데이터를 탐색
예제 1
- 패턴: .*

추가 지식 : 특수문자 ? 찾기 위해서는 \기호를 앞에 붙여서 이스케이프시퀀스(예외) 처리 필요

해설:
?부터 뒤 데이터를 모두 추출

 
예제 2

해설: (.*)
SubMatches 를 사용하여 ? ~ 4 사이의 데이터를 추출합니다예제 1번의 패턴은 읽어올 범위 시작 문자와 끝 문자가 포함돼서 추출되지만본 패턴은 포함시키지 않기 위해 사용합니다
예제 3 : (.*) (.*)
해설 :
SubMatches, 즉 부패턴을 여러 개 사용하기 때문에 함수의 3번째 인수를 지정 해야합니다
이 예제 처럼 (.*) 2개가 들어가는 경우
1 입력 시 노트패드가 출력되고
2 입력 시 네이버가 출력이되는 것을 확인 하실 수 있습니다
즉 들어가는 숫자는 입력 하신 (.*) 순서대로 정해주시면 됩니다



 

VBA 함수 코드
Function RegExMatch(str, Lag, Optional cnt)
On Error GoTo error
Dim re As Object
Dim i As Integer
Set re = CreateObject("VBScript.RegExp")

With re

.Pattern = Lag
.ignoreCase = True ' 대소문자를 구분할지 선택하는 옵션
.MultiLine = True
.Global = True

End With
Set b = re.Execute(str)(0)
If (b.SubMatches.Count) Then: RegExMatch = b.SubMatches(cnt - 1): Else: RegExMatch = b.Value
error:
End Function