Excel RegEx przykłady: używanie wyrażeń regularnych w formułach

  • Udostępnij To
Michael Brown

Nie możesz zrozumieć, dlaczego wyrażenia regularne nie są obsługiwane w formułach programu Excel? Teraz są :) Dzięki naszym niestandardowym funkcjom możesz łatwo znaleźć, zastąpić, wyodrębnić i usunąć ciągi pasujące do określonego wzorca.

Na pierwszy rzut oka Excel ma wszystko, co może być potrzebne do manipulacji ciągami tekstowymi. Hmm... a co z wyrażeniami regularnymi? Ups, w Excelu nie ma wbudowanych funkcji Regex, ale nikt nie mówi, że nie możemy stworzyć własnych :)

    Co to jest wyrażenie regularne?

    Wyrażenie regularne (aka regex lub regexp ) jest specjalnie zakodowaną sekwencją znaków, która definiuje wzorzec wyszukiwania. Używając tego wzorca, możesz znaleźć pasującą kombinację znaków w łańcuchu lub sprawdzić poprawność wprowadzonych danych. Jeśli znasz notację symboli wieloznacznych, możesz myśleć o regexach jako o zaawansowanej wersji symboli wieloznacznych.

    Wyrażenia regularne mają swoją własną składnię składającą się ze znaków specjalnych, operatorów i konstrukcji. Na przykład, [0-5] pasuje do każdej pojedynczej cyfry od 0 do 5.

    Wyrażenia regularne są używane w wielu językach programowania, w tym w JavaScript i VBA. Ten ostatni posiada specjalny obiekt RegExp, który wykorzystamy do tworzenia naszych własnych funkcji.

    Czy Excel obsługuje regex?

    Niestety, w programie Excel nie ma wbudowanych funkcji Regex. Aby móc używać wyrażeń regularnych w formułach, będziesz musiał stworzyć własną funkcję zdefiniowaną przez użytkownika (opartą na VBA lub .NET) lub zainstalować narzędzia innych firm obsługujące regexy.

    Excel Regex cheat sheet

    Niezależnie od tego, czy wzór regex jest bardzo prosty, czy niezwykle wyrafinowany, jest on zbudowany przy użyciu wspólnej składni. Ten tutorial nie ma na celu nauczenia Cię wyrażeń regularnych. W tym celu istnieje wiele zasobów online, od darmowych samouczków dla początkujących do kursów premium dla zaawansowanych użytkowników.

    Poniżej przedstawiamy szybkie odniesienie do głównych wzorców RegEx, które pomoże Ci w zrozumieniu podstaw, a także może posłużyć jako arkusz informacyjny podczas studiowania dalszych przykładów.

    Jeśli jesteś wygodny z wyrażeniami regularnymi, możesz przeskoczyć prosto do funkcji RegExp.

    Postacie

    Są to najczęściej używane wzorce do dopasowania określonych znaków.

    Wzór Opis Przykład Mecze
    . Znak wieloznaczny: pasuje do każdego pojedynczego znaku z wyjątkiem przerwy w linii .ot kropka , gorąca , garnek , @ot
    \d Znak cyfry: dowolna pojedyncza cyfra od 0 do 9 \d W a1b , mecze 1
    \D Każdy znak, który NIE jest cyfrą \D W a1b , mecze a oraz b
    \s Znak białej spacji: spacja, tabulator, nowa linia i powrót karetki .\s. W 3 centy , mecze 3 c
    \S Dowolny znak spoza spacji \S+ W 30 centów , mecze 30 oraz centy
    \w Znak słowny: dowolna litera ASCII, cyfra lub podkreślenie \w+ W 5_kotów***. , mecze 5_kotów
    \W Każdy znak, który NIE jest znakiem alfanumerycznym lub podkreśleniem \W+ W 5_kotów***. , mecze ***
    \t Zakładka
    \n Nowa linia \NNiestety. W poniższym dwuwierszowym ciągu, dopasowania 10

    5 kotów

    10 psów

    \ Ukrywa specjalne znaczenie znaku, dzięki czemu można go wyszukać \.

    \w+\.

    Ucieka od kropki, aby można było znaleźć dosłowny znak "." w łańcuchu.

    Pan. , Pani. , Prof.

    Klasy postaci

    Używając tych wzorców, można dopasować elementy różnych zestawów znaków.

    Wzór Opis Przykład Mecze
    [postacie] Dopasowuje każdy pojedynczy znak w nawiasach d[oi]g pies oraz dig
    [^characters] Dopasowuje każdy pojedynczy znak NIE znajdujący się w nawiasach d[^oi]g Mecze dag, dug , d1g

    Nie pasuje pies oraz dig

    [od-do] Dopasowuje dowolny znak w zakresie pomiędzy nawiasami [0-9]

    [a-z]

    [A-Z]

    Dowolna pojedyncza cyfra od 0 do 9

    Każda pojedyncza mała litera

    Każda pojedyncza wielka litera

    Kwantyfikatory

    Kwantyfikatory to specjalne wyrażenia określające liczbę znaków do dopasowania. Kwantyfikator zawsze odnosi się do znaku przed nim.

    Wzór Opis Przykład Mecze
    * Zero lub więcej wystąpień 1a* 1, 1a , 1aa, 1aaa , itp.
    + Jedno lub więcej wystąpień po+ W garnek , mecze po

    W biedny , mecze kupa

    ? Zero lub jedno wystąpienie roa?d droga, pręt
    *? Zero lub więcej wystąpień, ale jak najmniej. 1a*? W 1a , 1aa oraz 1aaa , mecze 1a
    +? Jedno lub więcej wystąpień, ale jak najmniej. Po+? W garnek oraz biedny , mecze po
    ?? Zero lub jedno wystąpienie, ale jak najmniej. roa??? W droga oraz pręt , mecze ro
    {n} Odpowiada poprzedniemu wzorcowi n razy \d{3} Dokładnie 3 cyfry
    {n,} Odpowiada poprzedniemu wzorcowi n lub więcej razy \d{3,} 3 lub więcej cyfr
    {n,m} Dopasowuje poprzedni wzór od n do m razy \d{3,5} Od 3 do 5 cyfr

    Grupowanie

    Konstrukcje grupujące służą do przechwytywania podłańcucha z łańcucha źródłowego, dzięki czemu można wykonać z nim jakąś operację.

    Składnia Opis Przykład Mecze
    (wzór) Grupa przechwytująca: przechwytuje pasujący podłańcuch i przypisuje mu liczbę porządkową (\d+) W 5 kotów i 10 psów , uchwyty 5 (grupa 1) oraz 10 (grupa 2)
    (?:wzór) Grupa nie przechwytująca: pasuje do grupy, ale jej nie przechwytuje (?: psy) W 5 kotów i 10 psów , uchwyty 10
    \1 Zawartość grupy 1 (™d+)™ = ™2 ™} Pasuje 5+10=10+5 i przechwytuje 5 oraz 10 , które są w grupach przechwytujących
    \2 Zawartość grupy 2

    Kotwy

    Kotwice określają pozycję w łańcuchu wejściowym, gdzie należy szukać dopasowania.

    Kotwica Opis Przykład Mecze
    ^ Początek ciągu

    Uwaga: [^inside brackets] oznacza "nie"

    ^\d+ Dowolna liczba cyfr na początku ciągu.

    W 5 kotów i 10 psów , mecze 5

    $ Koniec ciągu \d+$ Dowolna liczba cyfr na końcu ciągu.

    W 10 plus 5 daje 15 , mecze 15

    \b Granica słowa /Zabawa. Mecze radość jako osobne słowo, ale nie w przyjemne .
    \B NIE jest to granica słów /Jakiekolwiek. Mecze radość w przyjemne , ale nie jako osobne słowo.

    Konstrukcja alternatywna (OR)

    Operand przemienny włącza logikę OR, więc możesz dopasować ten lub ten element.

    Skonstruuj Opis Przykład Mecze
    Dopasowuje każdy pojedynczy element oddzielony pionowym paskiem (s W sprzedaje muszelki, mecze sprzedaje oraz muszle

    Obejścia

    Konstrukcje lookaround są pomocne, gdy chcesz dopasować coś, co jest lub nie jest poprzedzone czymś innym. Wyrażenia te są czasami nazywane "twierdzeniami o zerowej szerokości" lub "dopasowaniem o zerowej szerokości", ponieważ dopasowują pozycję, a nie rzeczywiste znaki.

    Uwaga. W VBA RegEx flavor, lookbehinds nie są obsługiwane.

    Wzór Opis Przykład Mecze
    (?=) Pozytywne oczekiwanie X(?=Y) Odpowiada wyrażeniu X, gdy po nim następuje Y (tzn. gdy Y jest przed X)
    (?!) Negatywny lookahead X(?!Y) Odpowiada wyrażeniu X, jeśli NIE następuje po nim Y
    (?<=) Pozytywne spojrzenie w przeszłość (?<=Y)X Dopasowuje wyrażenie X, gdy jest poprzedzone Y (tzn. gdy za X jest Y)
    (? )</td Negatywne spojrzenie za siebie (? Y)X</td Odpowiada wyrażeniu X, gdy NIE jest ono poprzedzone przez Y

    Teraz, gdy znasz już podstawy, przejdźmy do najciekawszej części - używania regexów na rzeczywistych danych do parsowania ciągów i znajdowania potrzebnych informacji. Jeśli potrzebujesz więcej szczegółów na temat składni, pomocny może okazać się przewodnik Microsoftu na temat języka wyrażeń regularnych.

    Niestandardowe funkcje RegEx dla programu Excel

    Jak już wspomniano, Microsoft Excel nie ma wbudowanych funkcji RegEx. Aby umożliwić wyrażenia regularne, stworzyliśmy trzy niestandardowe funkcje VBA (aka funkcje zdefiniowane przez użytkownika). Możesz skopiować kody z poniżej podlinkowanych stron lub z naszego przykładowego skoroszytu, a następnie wkleić je do własnych plików Excela.

    Jak działają funkcje VBA RegExp

    Ta sekcja wyjaśnia wewnętrzną mechanikę i może być interesująca dla tych, którzy chcą wiedzieć, co dokładnie dzieje się na backendzie.

    Aby zacząć używać wyrażeń regularnych w VBA, musisz albo uaktywnić bibliotekę referencji obiektów RegEx, albo użyć funkcji CreateObject. Aby zaoszczędzić Ci kłopotów z ustawianiem referencji w edytorze VBA, wybraliśmy to drugie podejście.

    Obiekt RegExp posiada 4 właściwości:

    • Wzór - to wzór do dopasowania w łańcuchu wejściowym.
    • Global - kontroluje, czy znaleźć wszystkie dopasowania w łańcuchu wejściowym, czy tylko pierwsze. W naszych funkcjach jest ona ustawiona na True, aby uzyskać wszystkie mecze .
    • MultiLine - określa, czy wzorzec ma być dopasowywany przez przerwy między wierszami w łańcuchach wielowierszowych, czy tylko w pierwszym wierszu. W naszych kodach jest on ustawiony na True, aby przeszukiwać w każdym wierszu .
    • IgnorujCase - określa, czy wyrażenie regularne jest wrażliwe na wielkość liter (domyślnie) czy niewrażliwe na wielkość liter (ustawione na True). W naszym przypadku zależy to od tego, jak skonfigurujemy opcjonalną opcję dopasowanie_przypadku Domyślnie wszystkie funkcje są rozróżnianie wielkości liter .

    Ograniczenia VBA RegExp

    Excel VBA implementuje podstawowe wzorce regex, ale brakuje mu wielu zaawansowanych funkcji dostępnych w .NET, Perlu, Javie i innych silnikach regex. Na przykład RegExp VBA nie obsługuje modyfikatorów inline, takich jak (?i) dla dopasowania niewrażliwego na wielkość liter lub (?m) dla trybu wieloliniowego, lookbehindów, klas POSIX, aby wymienić tylko kilka.

    Funkcja dopasowania Regex w programie Excel

    Na stronie RegExpMatch Funkcja wyszukuje na wejściu tekst pasujący do wyrażenia regularnego i zwraca TRUE jeśli zostanie znalezione dopasowanie, FALSE w przeciwnym wypadku.

    RegExpMatch(text, pattern, [match_case])

    Gdzie:

    • Tekst (wymagane) - jeden lub więcej ciągów znaków do wyszukiwania w.
    • Wzór (wymagane) - wyrażenie regularne do dopasowania.
    • Dopasowanie (opcjonalnie) - typ dopasowania. TRUE lub pominięty - rozróżnianie wielkości liter; FALSE - rozróżnianie wielkości liter.

    Kod funkcji znajduje się tutaj.

    Przykład: jak używać wyrażeń regularnych do dopasowywania ciągów znaków

    W poniższym zbiorze danych załóżmy, że chcesz zidentyfikować wpisy zawierające kody SKU.

    Biorąc pod uwagę, że każdy SKU zaczyna się od 2 dużych liter, po których następuje myślnik, a następnie 4 cyfry, można je dopasować za pomocą następującego wyrażenia.

    Wzór : B[A-Z]{2}-[4]

    Gdzie [A-Z]{2} oznacza 2 dowolne duże litery od A do Z, a Ą4} oznacza 4 dowolne cyfry od 0 do 9. Granica wyrazów Ą wskazuje, że SKU jest osobnym słowem, a nie częścią większego ciągu.

    Mając ustalony wzorzec, zacznij wpisywać formułę jak zwykle, a nazwa funkcji pojawi się na liście sugerowanej przez AutoComplete Excela:

    Zakładając, że oryginalny ciąg jest w A5, formuła przebiega następująco:

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

    Dla wygody można wprowadzić wyrażenie regularne w osobnej komórce i użyć bezwzględnego odwołania ($A$2) dla wzór argument. Dzięki temu adres komórki pozostanie niezmieniony podczas kopiowania formuły do innych komórek:

    =RegExpMatch(A5, $A$2)

    Aby zamiast TRUE i FALSE wyświetlić własne etykiety tekstowe, należy zagnieździć RegExpMatch w funkcji IF i podać żądane teksty w wartość_jeśli_true oraz wartość_jeśli_false argumenty:

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

    Więcej przykładów formuł można znaleźć w:

    • Jak dopasować ciągi znaków za pomocą wyrażeń regularnych
    • Walidacja danych w Excelu za pomocą regexów

    Funkcja Excel Regex Extract

    Na stronie RegExpExtract Funkcja wyszukuje podłańcuchy pasujące do wyrażenia regularnego i wyciąga wszystkie dopasowania lub konkretne dopasowanie.

    RegExpExtract(text, pattern, [instance_num], [match_case])

    Gdzie:

    • Tekst (wymagane) - ciąg tekstowy do wyszukiwania w.
    • Wzór (wymagane) - wyrażenie regularne do dopasowania.
    • Liczba instancji (opcjonalne) - numer seryjny, który wskazuje, która instancja ma zostać wyodrębniona. Jeżeli pominięty, zwraca wszystkie znalezione dopasowania (domyślnie).
    • Dopasowanie (opcjonalne) - określa czy dopasować (TRUE lub pominąć) czy zignorować (FALSE) wielkość liter w tekście.

    Możesz uzyskać kod funkcji tutaj.

    Przykład: jak wyodrębnić ciągi znaków za pomocą wyrażeń regularnych

    Posuwając się nieco dalej w naszym przykładzie, wyodrębnijmy numery faktur. W tym celu użyjemy bardzo prostego regexu, który dopasowuje dowolną 7-cyfrową liczbę:

    Wzór : \u200 \u200 \u200 \u200 \u200 \u200 \u200 \u200

    Umieść wzór w A2, a załatwisz sprawę dzięki tej kompaktowej i eleganckiej formule:

    =RegExpExtract(A5, $A$2)

    Jeśli wzorzec zostanie dopasowany, formuła wyciąga numer faktury, jeśli nie zostanie znaleziony odpowiednik - nic nie jest zwracane.

    Więcej przykładów znajdziesz w: Jak wyodrębnić ciągi w Excelu za pomocą regex.

    Funkcja Regex Replace w programie Excel

    Na stronie RegExpReplace Funkcja zastępuje wartości pasujące do regexa tekstem podanym przez użytkownika.

    RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

    Gdzie:

    • Tekst (wymagane) - ciąg tekstowy do wyszukiwania w.
    • Wzór (wymagane) - wyrażenie regularne do dopasowania.
    • Wymiana (wymagane) - tekst, którym należy zastąpić pasujące podciągi.
    • Liczba instancji (opcjonalnie) - instancja do zastąpienia. Domyślnie jest to "wszystkie mecze".
    • Dopasowanie (opcjonalne) - steruje czy dopasować (TRUE lub pominąć) lub zignorować (FALSE) wielkość liter w tekście.

    Kod funkcji dostępny jest tutaj.

    Przykład: jak zastąpić lub usunąć ciągi znaków za pomocą regexów

    Niektóre z naszych rekordów zawierają numery kart kredytowych. Te informacje są poufne i możesz chcieć je zastąpić innymi lub całkowicie usunąć. Oba zadania można wykonać z pomocą RegExpReplace Funkcja. jak W drugim scenariuszu będziemy zastępować pustym ciągiem.

    W naszej przykładowej tabeli wszystkie numery kart mają 16 cyfr, które są zapisane w 4 grupach oddzielonych spacjami. Aby je znaleźć, powielamy wzór za pomocą tego wyrażenia regularnego:

    Wzór : \u200 \u200 \u200 \u200 \u200 \u200 \u200 \u200

    W celu zastąpienia stosuje się następujący ciąg znaków:

    Wymiana : XXXX XXXX XXXX XXXX

    A oto kompletny wzór na wymienić numery kart kredytowych z niewrażliwymi informacjami:

    =RegExpReplace(A5, "XXXX XXXX XXXX XXXX")

    Z regexem i tekstem zastępczym w osobnych komórkach (A2 i B2) formuła działa równie dobrze:

    W Excelu "usuwanie" jest szczególnym przypadkiem "zastępowania".Do usunąć numery kart kredytowych, wystarczy użyć pustego ciągu ("") dla wymiana argument:

    =RegExpReplace(A5, "\", "")

    Wskazówka. Aby uzyskać rig pustych linii w wynikach, możesz użyć innej funkcji RegExpReplace, jak pokazano w tym przykładzie: Jak usunąć puste linie za pomocą regex.

    Więcej informacji można znaleźć w:

    • Jak zastąpić ciągi w Excelu za pomocą regexu
    • Jak usunąć ciągi znaków używając regex
    • Jak usunąć białe znaki przy użyciu regexów

    Narzędzia Regex do dopasowywania, wyodrębniania, zastępowania i usuwania podciągów

    Użytkownicy naszego pakietu Ultimate Suite mogą uzyskać całą moc wyrażeń regularnych bez wstawiania ani jednej linii kodu do swoich skoroszytów. Cały niezbędny kod jest napisany przez naszych programistów i płynnie zintegrowany z Twoim Excelem podczas instalacji.

    W przeciwieństwie do omówionych powyżej funkcji VBA, funkcje Ultimate Suite są oparte na technologii .NET, co daje dwie główne korzyści:

    1. Możesz używać wyrażeń regularnych w zwykłych skoroszytach .xlsx bez dodawania jakiegokolwiek kodu VBA i konieczności zapisywania ich jako plików z makrami.
    2. Silnik .NET Regex obsługuje w pełni funkcjonalne klasyczne wyrażenia regularne, co pozwala na konstruowanie bardziej zaawansowanych wzorców.

    Jak używać Regex w Excelu

    Po zainstalowaniu pakietu Ultimate Suite używanie wyrażeń regularnych w programie Excel jest tak proste, jak te dwa kroki:

    1. Na Dane Ablebits zakładka, w Tekst grupa, kliknij Narzędzia Regex .

    2. Na Narzędzia Regex wykonaj następujące czynności:
      • Wybierz dane źródłowe.
      • Wprowadź swój wzór regex.
      • Wybierz żądaną opcję: Mecz , Wyciąg , Usuń lub Wymienić .
      • Aby otrzymać wynik w postaci formuły, a nie wartości, wybierz Wstaw jako wzór pole wyboru.
      • Uderz w przycisk akcji.

      Na przykład, aby usunąć numery kart kredytowych z komórek A2:A6, konfigurujemy te ustawienia:

    W trymiga funkcja AblebitsRegex zostanie wstawiona do nowej kolumny na prawo od twoich oryginalnych danych. W naszym przypadku formuła to:

    =AblebitsRegexRemove(A2, "\")

    Gdy formuła już tam jest, możesz ją edytować, kopiować lub przenosić jak każdą rodzimą formułę.

    Jak wstawić formułę Regex bezpośrednio do komórki

    Funkcje AblebitsRegex można również wstawić bezpośrednio do komórki bez użycia interfejsu dodatku.Oto jak:

    1. Kliknij przycisk fx na pasku formuły lub Funkcja wstawiania na Formuły tab.
    2. W Funkcja wstawiania w oknie dialogowym, wybierz AblebitsUDFs kategorii, wybrać interesującą nas funkcję i kliknąć OK.

    3. Zdefiniuj argumenty funkcji jak zwykle i kliknij OK. Gotowe!

    Więcej informacji na ten temat można znaleźć w dokumencie Regex Tools for Excel.

    Oto jak używać wyrażeń regularnych do dopasowywania, wyodrębniania, zastępowania i usuwania tekstu w komórkach Excela. Dziękuję za przeczytanie i czekam na Ciebie na naszym blogu w przyszłym tygodniu!

    Dostępne pliki do pobrania

    Excel Regex - przykłady formuł (plik .xlsm)

    Ultimate Suite - wersja próbna (plik .exe)

    Michael Brown jest oddanym entuzjastą technologii z pasją do upraszczania złożonych procesów za pomocą narzędzi programowych. Dzięki ponad dziesięcioletniemu doświadczeniu w branży technologicznej doskonalił swoje umiejętności w programach Microsoft Excel i Outlook, a także w Arkuszach i Dokumentach Google. Blog Michaela jest poświęcony dzieleniu się swoją wiedzą i doświadczeniem z innymi, dostarczając łatwych do zastosowania wskazówek i samouczków w celu poprawy produktywności i wydajności. Niezależnie od tego, czy jesteś doświadczonym profesjonalistą, czy początkującym, blog Michaela oferuje cenne spostrzeżenia i praktyczne porady dotyczące maksymalnego wykorzystania tych niezbędnych narzędzi programowych.