Excel 정규식: 정규식을 사용하여 문자열 일치

  • 이 공유
Michael Brown

이 튜토리얼에서는 정규식을 사용하여 Excel에서 문자열을 일치시키는 방법에 대해 자세히 살펴보겠습니다.

범위에서 특정 값을 찾아야 하는 경우 셀의 경우 MATCH 또는 XMATCH 함수를 사용합니다. 셀에서 특정 문자열을 찾을 때 FIND 및 SEARCH 기능이 유용합니다. 셀에 주어진 패턴과 일치하는 정보가 포함되어 있는지 어떻게 알 수 있습니까? 당연히 정규 표현식을 사용합니다. 그러나 기본적으로 Excel은 정규식을 지원하지 않습니다! 걱정하지 마세요. 강제로 적용하겠습니다 :)

    문자열과 일치하는 Excel VBA Regex 함수

    정규식을 사용하려면 제목에서 꽤 명확하게 알 수 있습니다. Excel에서는 고유한 함수를 만들어야 합니다. 운좋게도 Excel의 VBA에는 내장된 RegExp 객체가 있어 아래와 같이 코드에서 사용할 수 있습니다.

    Public Function RegExpMatch(input_range As Range, pattern As String , Optional match_case As Boolean = True ) As Variant Dim arRes() As Variant '결과를 저장하는 배열 Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 소스 범위에서 현재 행의 인덱스, 소스 범위에서 현재 열의 인덱스, 행 수, 열 On Error GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = 패턴 regex.Global = True regex.MultiLine = True If True = match_case Then regex.ignorecase = False 그렇지 않으면 regex.ignorecase = True 끝식.

    패턴 : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b

    여기서 무슨 일이 일어나고 있는지 더 잘 이해하기 위해 각 부분을 자세히 살펴보겠습니다. :

    • 사용자 이름 에는 문자, 숫자, 밑줄, 점 및 하이픈이 포함될 수 있습니다. \w는 모든 문자, 숫자 또는 밑줄과 일치하므로 다음 정규식을 얻습니다. [\w\.\-]+
    • 도메인 이름 에는 대문자와 소문자가 포함될 수 있습니다. 숫자, 하이픈(첫 번째 또는 마지막 위치 제외) 및 점(하위 도메인의 경우). 밑줄은 허용되지 않으므로 \w 대신 3개의 다른 문자 집합을 사용합니다. [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
    • 최상위 도메인 은 점과 대문자 및 소문자로 구성됩니다. 2~24개의 문자를 포함할 수 있습니다(현재 존재하는 가장 긴 TLD): \.[A-Za-z]{2,24}

    참고. 패턴은 도메인 이름에 2개 이상의 영숫자가 포함되어 있다고 가정합니다.

    A5의 원본 텍스트와 A5의 패턴을 사용하여 수식은 다음과 같은 모양을 갖습니다.

    =RegExpMatch(A5, $A$2)

    또는 더 간단한 일반 소문자 또는 대문자 문자 집합을 사용하는 이메일 확인용 표현식:

    Pattern : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b

    하지만 수식은 대소문자를 구분하지 않습니다.

    =RegExpMatch(A5, $A$2, FALSE)

    정규식과 일치하는 Excel IF 수식

    내장 및 사용자 지정함수가 잘 작동하므로 하나의 수식에서 함께 사용하는 것을 방해하는 것은 없습니다.

    정규 표현식이 일치하는 경우 무언가를 반환하거나 계산하려면 일치하지 않는 경우 다른 것을 반환하거나 계산하려면 사용자 정의 RegExpMatch를 삽입하십시오. IF의 논리적 텍스트에 있는 함수:

    IF(RegExpMatch(…), [value_if_true], [value_if_false])

    예를 들어, A5의 문자열에 유효한 이메일 주소가 포함되어 있으면 "예"를 반환할 수 있습니다. 그렇지 않으면 "아니요".

    =IF(RegExpMatch(A5, $A$2,), "Yes", "No")

    정규식이 일치하는 경우 계산

    기본 Excel 함수는 정규식을 지원하지 않기 때문에 COUNTIS 또는 COUNTIFS 함수에 정규식을 직접 넣을 수 없습니다. 운 좋게도 사용자 지정 기능을 사용하여 이 기능을 에뮬레이션할 수 있습니다.

    정규식을 사용하여 전화 번호를 일치시키고 B열에 결과를 출력했다고 가정합니다. 전화 번호가 포함된 셀 수를 확인하려면 B5:B9의 TRUE 값을 계산합니다. 표준 COUNTIF 수식을 사용하면 쉽게 수행할 수 있습니다.

    =COUNTIF(B5:B9, TRUE)

    워크시트에 추가 열이 필요하지 않습니까? 문제 없어요. 사용자 지정 함수는 한 번에 여러 셀을 처리할 수 있고 Excel의 SUM은 배열의 값을 합산할 수 있다는 점을 염두에 두고 수행할 작업은 다음과 같습니다.

    • RegExpMatch에 범위 참조를 제공하여 TRUE 및 FALSE 값의 배열입니다.
    • 이중 부정(--)을 사용하여 논리 값을 1로 강제하고0.
    • 결과 배열에서 1과 0을 더하는 SUM 함수를 가져옵니다.

    =SUM(--RegExpMatch(A5:A9, $A$2))

    정규식 일치 Ultimate Suite 사용

    Ultimate Suite 사용자는 추가 기능 설치 중에 Excel에 원활하게 통합되므로 통합 문서에 VBA 코드를 추가하지 않고도 4개의 강력한 Regex 기능을 활용할 수 있습니다. 당사의 사용자 정의 함수는 표준 .NET RegEx 엔진에 의해 처리되며 모든 기능을 갖춘 클래식 정규식을 지원합니다.

    사용자 정의 RegexMatch 함수 사용 방법

    최신 버전의 Ultimate Suite가 설치되어 있다고 가정합니다( 2021.4 이상) 간단한 두 단계로 정규식 일치 수식을 만들 수 있습니다.

    1. Ablebits 데이터 탭의 텍스트 그룹에서 정규식 도구 .

  • 정규식 도구 창에서 다음을 수행합니다.
    • 선택 소스 문자열.
    • 패턴을 입력합니다.
    • 일치 옵션을 선택합니다.
    • 값이 아닌 수식으로 결과를 얻으려면 수식으로 삽입 확인란을 선택합니다.
    • 일치 버튼을 클릭합니다.

    잠시 후 AblebitsRegexMatch 함수가 데이터 오른쪽의 새 열에 삽입됩니다.

    아래 스크린샷에서 이 함수는 A열의 문자열에 7자리가 포함되어 있는지 확인합니다. 숫자인지 아닌지.

    팁:

    • 기능 삽입 에 직접 삽입 가능표준 함수 삽입 대화 상자를 통해 AblebitsUDFs 로 분류됩니다.
    • 기본적으로 정규식이 수식에 추가되지만 계속 유지할 수도 있습니다. 별도의 셀에 있습니다. 이를 위해 두 번째 인수에 대한 셀 참조를 사용하십시오.
    • 기본적으로 함수는 대소문자를 구분 합니다. 대소문자를 구분하지 않는 일치의 경우 (?i) 패턴을 사용합니다.

    자세한 내용은 AblebitsRegexMatch 함수를 참조하세요.

    Excel에서 정규식 일치를 수행하는 방법입니다. 읽어 주셔서 감사합니다. 다음 주 블로그에서 뵙겠습니다!

    사용 가능한 다운로드

    Excel Regex Match 예제(.xlsm 파일)

    Ultimate Suite 14- 일일 전체 기능 버전(.exe 파일)

    If cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols arRes(iInputCurRow, iInputCurCol) = regex.Test(input_range .Cells(iInputCurRow, iInputCurCol).Value) Next Next RegExpMatch = arRes Exit Function ErrHandl: RegExpMatch = CVErr(xlErrValue) End Function

    코드를 VBA 편집기에 붙여넣으면 새 RegExpMatch 함수가 사용할 준비가 되었습니다. VBA에 익숙하지 않은 경우 이 가이드가 도움이 될 수 있습니다. Excel에 VBA 코드를 삽입하는 방법.

    참고. 코드를 삽입한 후 파일을 매크로 사용 통합 문서 (.xlsm)로 저장해야 합니다.

    RegExpMatch 구문

    RegExpMatch 함수는 소스 문자열의 일부가 정규식과 일치하는지 확인합니다. 결과는 부울 값입니다. 하나 이상의 일치 항목이 발견되면 TRUE, 그렇지 않으면 FALSE입니다.

    사용자 지정 함수에는 3개의 인수가 있습니다. 처음 두 개는 필수이고 마지막 인수는 선택 사항입니다.

    RegExpMatch(text , pattern, [match_case])

    여기서:

    • Text (필수) - 검색할 하나 이상의 문자열입니다. 셀 또는 범위 참조로 제공될 수 있습니다.
    • Pattern (필수) - 일치시킬 정규식입니다. 수식에 직접 배치하는 경우 패턴을 큰따옴표로 묶어야 합니다.
    • Match_case (선택 사항) - 일치를 정의합니다.유형. TRUE이거나 생략된 경우(기본값), 대소문자 구분 일치가 수행됩니다. FALSE인 경우 - 대소문자를 구분하지 않습니다.

    이 함수는 모든 버전의 Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 및 Excel 2010에서 작동합니다.

    3가지 RegExpMatch에 대해 알아야 합니다.

    실제적인 계산을 시작하기 전에 몇 가지 전문적인 사항을 명확히 하는 다음 사항에 유의하십시오.

    1. 함수는 단일 셀<9을 처리할 수 있습니다> 또는 셀 범위 . 후자의 경우 결과는 이 예와 같이 동적 배열 또는 유출 범위의 형태로 이웃 셀에 반환됩니다.
    2. 기본적으로 함수는 대소문자를 구분합니다 . 텍스트 대소문자를 무시하려면 match_case 인수를 FALSE로 설정하십시오. VBA Regexp 제한으로 인해 대소문자를 구분하지 않는 패턴(?i)은 지원되지 않습니다.
    3. 유효한 패턴이 없으면 함수는 FALSE를 반환합니다. 패턴이 유효하지 않은 경우 #VALUE! 오류가 발생합니다.

    아래에는 데모 목적으로 생성된 몇 가지 정규식 일치 예제가 나와 있습니다. 패턴이 실제 워크시트의 더 넓은 범위의 입력 데이터와 완벽하게 작동한다고 보장할 수 없습니다. 생산에 투입하기 전에 필요에 따라 샘플 패턴을 테스트하고 조정해야 합니다.

    정규식을 사용하여 Excel에서 문자열을 일치시키는 방법

    일치시키려는 모든 문자열이 같은 패턴,정규식은 이상적인 솔루션입니다.

    일부 항목에 대한 다양한 세부 정보를 포함하는 셀 범위(A5:A9)가 있다고 가정합니다. 어떤 셀에 SKU가 있는지 알고 싶습니다. 각 SKU가 2개의 대문자, 하이픈 및 3개의 숫자로 구성되어 있다고 가정하면 다음 식을 사용하여 일치시킬 수 있습니다.

    패턴 : \b[A-Z]{2}-\ d{3}\b

    여기서 [A-Z]{2}는 A에서 Z까지의 2개의 대문자를 의미하고 \d{3}는 0에서 9까지의 3개의 숫자를 의미합니다. \b 문자는 단어를 나타냅니다. 경계, 즉 SKU는 별도의 단어이며 2022년 3월 23일과 같은 더 큰 문자열의 일부가 아닙니다.

    패턴이 설정되면 공식 작성으로 넘어갈 수 있습니다. 기본적으로 사용자 지정 함수를 사용하는 것은 기본 함수를 사용하는 것과 다르지 않습니다. 수식 입력을 시작하면 Excel의 자동 완성 기능이 제안하는 목록에 함수 이름이 나타납니다. 그러나 Dynamic Array Excel(Microsoft 365 및 Excel 2021)과 기존 Excel(2019 및 이전 버전)에는 몇 가지 미묘한 차이가 있습니다.

    한 셀에서 문자열 일치

    문자열을 일치시키려면 단일 셀에서 첫 번째 인수의 해당 셀을 참조하십시오. 두 번째 인수는 정규식을 포함해야 합니다.

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    패턴은 절대 참조($A$2)로 잠긴 미리 정의된 셀에 보관할 수도 있습니다.

    =RegExpMatch(A5, $A$2)

    첫 번째 셀에 수식을 입력한 후 다른 모든 행으로 드래그할 수 있습니다.

    이 방법은 모든 Excel 버전 에서 완벽하게 작동합니다.

    한 번에 여러 셀의 문자열 일치

    단일 수식으로 여러 문자열을 일치시키려면 첫 번째 인수에 범위 참조 포함:

    =RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")

    동적 배열을 지원하는 Excel 365 Excel 2021 에서는 다음과 같이 작동합니다. 첫 번째 셀에 수식을 입력하고 Enter 키를 누르면 수식이 자동으로 아래 셀에 쏟아집니다.

    Excel 2019 및 이전 버전에서는 셀 범위에 입력하고 Ctrl + Shift + Enter 키를 함께 눌러 완료하는 기존의 CSE 배열 수식으로만 작동합니다.

    Regex to match number

    0에서 9까지의 단일 숫자를 일치시키려면 정규식에서 \d 문자를 사용하십시오. 특정 작업에 따라 적절한 한정 기호를 추가하거나 더 복잡한 패턴을 만드세요.

    모든 숫자와 일치하는 정규식

    모든 길이의 숫자와 일치시키려면 + 한정 기호를 / 바로 뒤에 넣으세요. 1개 이상의 숫자를 포함하는 숫자를 찾으라고 말하는 d 문자.

    패턴 : \d+

    =RegExpMatch(A5:A9, "\d+")

    특정 길이의 숫자와 일치하는 정규식

    목표가 특정 자릿수를 포함하는 숫자 값과 일치하는 것이라면 적절한 한정 기호와 함께 \d를 사용합니다.

    예: 정확히 7자리로 구성된 인보이스 번호를 일치시키려면 \d{7}를 사용합니다. 그러나 7과 일치한다는 점에 유의하십시오.예상대로:

    참고:

    • 국제 코드는 확인되지 않으므로 있을 수도 있고 없을 수도 있습니다.
    • 정규식에서 \s는 공백, 탭, 캐리지 리턴 또는 새 줄과 같은 공백 문자를 나타냅니다. 공백만 허용하려면 [-\. ] 대신 [-\.\s].
    • 문자와 일치하지 않는 정규식

      특정 문자를 포함하지 않는 문자열을 찾으려면 다음과 일치하는 부정 문자 클래스 [^ ]를 사용할 수 있습니다. 괄호 안에 없는 것. 예:

      • [^13]은 1 또는 3이 아닌 모든 단일 문자와 일치합니다.
      • [^1-3]은 1이 아닌 모든 단일 문자와 일치합니다. 2 또는 3(예: 1에서 3까지의 모든 숫자).

      전화번호 목록에서 국가 코드가 없는 번호를 찾으려고 한다고 가정합니다. 모든 국제 코드에는 + 기호가 포함되어 있으므로 [^\+] 문자 클래스를 사용하여 더하기 기호가 포함되지 않은 문자열을 찾을 수 있습니다. 위의 식은 +가 아닌 모든 단일 문자와 일치한다는 점을 인식하는 것이 중요합니다. 전화번호는 반드시 처음부터가 아니라 문자열의 어느 위치에나 있을 수 있으므로 이후의 각 문자를 확인하기 위해 * 한정 기호가 추가됩니다. 시작 ^ 및 끝 $ 앵커는 전체 문자열이 처리되도록 합니다. 결과적으로 "문자열의 어떤 위치에서도 + 문자와 일치하지 않음"이라는 아래 정규식을 얻습니다.

      Pattern :^[^\+]*$

      =RegExpMatch(A5, "^[^\+]*$")

      문자열과 일치하지 않는 정규식

      에 대한 특별한 정규식 구문은 없지만 특정 문자열과 일치하지 않는 경우 부정적인 예측을 사용하여 이 동작을 에뮬레이션할 수 있습니다.

      "lemons"라는 단어를 포함하지 않는 문자열을 찾고자 한다고 가정합니다. 이 정규식은 잘 작동합니다:

      Pattern : ^((?!lemons).)*$

      분명히 여기에 약간의 설명이 필요합니다. 부정적인 예측(?!레몬)은 앞에 "레몬"이라는 단어가 없는지 확인하기 위해 오른쪽을 봅니다. "lemons"가 없으면 점은 줄 바꿈을 제외한 모든 문자와 일치합니다. 위 식은 한 번만 확인하고 * 수량자는 ^로 고정된 문자열의 시작부터 $로 고정된 문자열의 끝까지 이를 0번 이상 반복합니다.

      텍스트 대소문자를 무시하려면 세 번째 인수를 FALSE로 설정하여 함수가 대소문자를 구분하지 않도록 합니다.

      =RegExpMatch(A5, $A$2, FALSE)

      팁 및 참고 사항:

      • 위의 정규식은 한 줄 문자열에서만 작동합니다. milti-line 문자열의 경우 ^ 및 $ 문자는 입력 문자열의 시작 및 끝 대신 각 줄의 시작 및 끝과 일치하므로 정규식은 첫 번째 줄에서만 검색합니다.
      • 시작하지 않는 문자열 을 특정 텍스트 와 일치시키려면 ^(?!lemons).*$
      • 와 같은 정규식을 사용하십시오. 끝나지 않는 문자열을 특정 텍스트 와 일치시키려면 다음을 포함합니다.끝 문자열을 검색 패턴에 고정: ^((?!lemons$).)*$

      대소문자를 구분하지 않는 일치

      클래식 정규식에는 다음에 대한 특수 패턴이 있습니다. 대소문자를 구분하지 않는 일치(?i)는 VBA RegExp에서 지원되지 않습니다. 이 제한을 극복하기 위해 사용자 지정 함수는 match_case 라는 세 번째 선택적 인수를 허용합니다. 대소문자를 구분하지 않고 일치시키려면 FALSE로 설정하기만 하면 됩니다.

      1-Mar-22 또는 01-MAR-2022와 같은 날짜를 식별하고 싶다고 가정해 보겠습니다. dd-mmm-yyyy d-mmm-yy 형식을 일치시키기 위해 다음 정규식을 사용하고 있습니다.

      패턴 : \b\d{1,2}-(1월10자리 또는 100자리 숫자를 포함하여 문자열의 모든 숫자. 원하는 내용이 아닌 경우 양쪽에 단어 경계 \b를 입력합니다.

      패턴 : \b\d{7}\b

      =RegExpMatch(A5:A9, "\b\d{7}\b")

      전화번호를 일치시키는 정규식

      전화번호는 다양한 형식으로 작성할 수 있으므로 일치시키기 위해서는 보다 정교한 정규식이 필요합니다.

      아래 데이터 세트에서 처음 2개 그룹에 3자리, 마지막 그룹에 4자리가 있는 10자리 숫자를 검색합니다. 그룹은 마침표, 하이픈 또는 공백으로 구분할 수 있습니다. 첫 번째 그룹은 괄호로 묶을 수도 있고 묶지 않을 수도 있습니다.

      패턴: (\(\d{3}\)

    Michael Brown은 소프트웨어 도구를 사용하여 복잡한 프로세스를 단순화하려는 열정을 가진 열성적인 기술 애호가입니다. 기술 산업에서 10년 이상의 경험을 쌓은 그는 Microsoft Excel 및 Outlook은 물론 Google 스프레드시트 및 문서 도구에 대한 기술을 연마했습니다. Michael의 블로그는 자신의 지식과 전문 지식을 다른 사람과 공유하는 데 전념하며 따라하기 쉬운 팁과 생산성 및 효율성 향상을 위한 자습서를 제공합니다. 노련한 전문가이든 초보자이든 Michael의 블로그는 이러한 필수 소프트웨어 도구를 최대한 활용하기 위한 귀중한 통찰력과 실용적인 조언을 제공합니다.