VBA 정규식
In this Article
이 튜토리얼에서는 VBA에서 정규식을 사용하는 방법을 보여드립니다.
정규식은 무엇인가요?
정규식은 문자를 표현하는 공식을 의미합니다. 정규식은 다른 문자열에서 일치하는 패턴을 찾는 데 사용할 수 있는 일련의 문자로 구성된 패턴입니다. VBA에서 정규식을 사용하려면 RegExp 객체를 사용해야 합니다.
[A-C]와 같은 패턴은 문자열에서 A부터 C까지의 대문자를 검색하고 일치하는 항목이 있는지 확인하는데 사용할 수 있습니다. 정규식 패턴에는 고유한 구문이 있으며 문자 또는 문자열을 사용하여 만들 수 있습니다.
일치하는 문자열 찾기
다음 표는 정규식 패턴을 작성할 수 있는 구문을 보여줍니다.
패턴 구문 | 설명 | 패턴 예제 | 일치하는 항목 |
---|---|---|---|
. | 줄바꿈을 제외한 모든 단일 문자를 일치하는 항목으로 간주합니다 | f.n | fan, fon, f@n, fwn |
[characters] | 괄호[] 사이에 있는 단일 문자들중 하나라도 일치하면 일치한다고 간주합니다 | [fn] | fan(f와 n이 포함되어 있으므로 일치) |
[^characters] | 괄호[] 사이에 있지 않은 단일 문자가 있으면 일치한다고 간주합니다 | [^fn] | fjn(f와 n이 있지만 j가 있으므로 일치) |
[start-end] | 괄호[] 사이에 있는 범위에 해당하면 일치한다고 간주합니다. | [1-5] | 45(4와 5가 범위 내에 있으므로 일치) |
\w | 영문자와 숫자, 밑줄은 일치하지만 공백 문자는 일치하지 않다고 간주합니다 | \w | “,c.”(c가 조건에 포함되므로 일치) |
\W | 영문자와 숫자, 밑줄이 아닌 모든 문자를 일치하다고 간주합니다 | \W | “bb@bb”(@가 조건에 포함되므로 일치) |
\s | 공백과 탭과 같은 모든 공백 문자와 일치하다고 간주합니다 | \s | “This is”(공백이 조건에 포함되므로 일치) |
\S | 공백을 제외한 모든 문자와 일치하다고 간주합니다 | \S | “T h”(T와 h가 조건에 포함되므로 일치) |
\d | 0~10의 숫자와 일치하다고 간주합니다 | \d | “a7h”(7이 조건에 포함되므로 일치) |
\D | 숫자를 제외한 모든 문자와 일치하다고 간주합니다 | \D | “47j”(j가 조건에 포함되므로 일치) |
\ | 검색 조건으로 특수문자를 입력할때 사용합니다 | \. | “59.pQ”(.이 조건에 포함되므로 일치) |
\t | 탭 문자와 일치하다고 간주합니다 | \t | 탭 문자가 있을 경우 일치 |
\r | 캐리지 리턴과 일치하다고 간주합니다 | \r | 캐리지리턴(vbCr)이 있을 경우 일치 |
\n | 줄바꿈(vbNewLine)과 일치하다고 간주합니다 | \n | 줄바꿈 문자가 있을 경우 일치 |
수량자
수량자를 사용하여 패턴을 문자열과 일치시킬 횟수를 지정할 수 있습니다.
수량자 | 설명 | 패턴 예제 | 일치하는 항목 |
---|---|---|---|
* | 0개 이상 항목을 일치하다고 간주합니다 | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | 1개 이상 항목을 일치하다고 간주합니다 | fn+a | fna, fnna, fnfnna |
? | 1개 이하 항목이 일치하다고 간주합니다 | fn?a | fa, fna |
{n} | 해당 패턴이 n번 나온다고 간주합니다 | d\W{4} | Would match “d….” in “d….&5hi” |
{n,} | 해당 패턴이 적어도 n번 나온다고 간주합니다 | d\W{4,} | Would match “d….&” in “d….&5hi” |
{n,m} | 해당 패턴이 n에서 m번 사이만큼 나온다고 간주합니다 | d\W{1,8} | Would match “d….&&&&” in “d….&&&&5hi” |
그룹화
그룹화 또는 캡처를 사용하면 패턴을 사용하여 문자열의 일부를 추출할 수 있습니다.
패턴 | 설명 | 패턴 예제 | 일치하는 항목 및 추출된 항목 |
---|---|---|---|
(expression) | 괄호 안의 패턴을 그룹화하여 문자열 일부를 추출합니다. | (\W{4}) | “1@@@@1jlmba”에서 “@@@@” 를 추출합니다. |
VBA에서 정규식을 사용하는 방법
VBA에서 정규식을 사용하려면 먼저 VBE 편집기에서 참조를 설정해야 합니다. VBE 편집기에서 도구 > 참조 > Microsoft VBScript Regular Expressions 항목을 선택합니다.
다음은 RegExp 객체의 속성입니다:
- Pattern – 검색할 문자열의 패턴입니다.
- IgnoreCase – True인 경우 검색할 문자열에서 대/소문자를 무시합니다.
- Global – True이면 문자열에서 패턴과 일치하는 모든 항목을 찾습니다. False이면 첫 번째 일치 항목만 찾습니다.
- MultiLine – True이면 줄 바꿈에 걸쳐 일치하는 패턴 검색을 수행합니다.
다음은 RegExp 객체의 메서드입니다:
- Test – 문자열에서 패턴을 검색하고 일치하는 항목이 발견되면 True를 반환합니다.
- Replace – 패턴의 발생 부분을 새로운 문자열로 바꿉니다.
- Execute – 문자열에 대한 패턴의 일치 항목을 반환합니다.
문자열에 대해 패턴이 일치하는지 테스트하기
Test 메서드를 사용하여 패턴이 입력 문자열과 일치하는지 확인할 수 있습니다. 일치하는 항목이 발견되면 결과는 True입니다. 다음 코드는 문자열에 대해 패턴을 테스트하는 방법을 보여줍니다:
Sub RegexTestingAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp
regexOne.Pattern = "f....a"
stringOne = "000111fjo88a8"
Debug.Print regexOne.Test(stringOne)
End Sub
결과는 다음과 같습니다:
문자열에서 해당되는 패턴을 다른 문자열로 바꾸기
Replace 메서드를 사용하여 문자열에서 일치하는 패턴의 첫 번째 항목만 바꾸거나 문자열에서 일치하는 패턴의 모든 항목들을 바꿀 수 있습니다. Global이 False로 설정되어 있으면 첫 번째 인스턴스만 바뀝니다. 다음 코드는 문자열에서 해당되는 패턴을 바꾸는 방법을 보여줍니다:
Sub RegexReplacingAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp
regexOne.Pattern = "번호는"
regexOne.Global = False
stringOne = "번호는 718901"
Debug.Print regexOne.Replace(stringOne, "새로운 번호는")
End Sub
결과는 다음과 같습니다:
위에서 사용한 문자열의 숫자 부분만 바꾸려면 다음 코드를 사용합니다:
Sub RegexReplacingAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp
regexOne.Pattern = "[^\D]+"
regexOne.Global = False
stringOne = "번호는 718901"
Debug.Print regexOne.Replace(stringOne, "777192")
End Sub
결과는 다음과 같습니다:
문자열에서 특정 패턴과 일치하는 모든 항목을 바꾸려면 Global 값을 True로 설정합니다. 다음 코드는 문자열에서 -A1289C-과 일치하는 모든 항목을 다른 문자로 대체하는 방법을 보여줍니다:
Sub RegexReplacingEveryInstanceOfAPattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp
regexOne.Pattern = "\W\A\d+C\W"
regexOne.Global = True
stringOne = "ABC-A1289C-ABC-A1289C-ABC"
Debug.Print regexOne.Replace(stringOne, "IJK")
End Sub
문자열에서 일치하는 패턴 표시하기
Execute 메서드를 사용하여 문자열 내에서 일치하는 패턴을 모두 추출할 수 있습니다. 다음 코드는 문자열에서 일치하는 패턴을 모두 표시하는 방법을 보여줍니다:
Sub RegexMatchingAndDisplayingAPattern()
Dim stringOne As String
Dim regexOne As Object
Dim theMatches As Object
Dim Match As Object
Set regexOne = New RegExp
regexOne.Pattern = "A.C"
regexOne.Global = True
regexOne.IgnoreCase = True
stringOne = "ABC-A1289C-ADC-A1289C-AJC"
Set theMatches = regexOne.Execute(stringOne)
For Each Match In theMatches
Debug.Print Match.Value
Next
End Sub
결과는 다음과 같습니다:
위의 문자열에서 -ADC-만 추출해 보겠습니다. 다음 코드는 문자열에서 -ADC-의 패턴이 포함되어 있는지 확인하고 추출하는 방법을 보여줍니다:
Sub RegexMatchingAndDisplayingAPattern()
Dim stringOne As String
Dim regexOne As Object
Dim theMatches As Object
Dim Match As Object
Set regexOne = New RegExp
regexOne.Pattern = "\-\A.C\-"
regexOne.Global = False
regexOne.IgnoreCase = True
stringOne = "ABC-A1289C-ADC-A1289C-AEC"
Set theMatches = regexOne.Execute(stringOne)
For Each Match In theMatches
Debug.Print Match.Value
Next
End Sub
정규식은 배우는 데 다소 시간이 걸릴 수 있지만, 텍스트 문자열을 식별하고 조작하기 위해 필요한 강력한 도구입니다. 또한 프로그래밍 언어 전반에 걸쳐 광범위하게 사용됩니다.