Jak używać wyrażeń regularnych w programie Microsoft Word - wskazówki dotyczące programu Excel

Lissa pyta:

Czy istnieje sposób na zmianę liczby (zawsze losowej) po słowie lis? Przykład: lis 23, niedźwiedź 1, lis 398, żaba 12, lis 15. Chcę zmienić numer na ten sam kolor, co słowo lis.

Możemy znaleźć i zastąpić formatem w programie Microsoft Word. Jest to świetna funkcja umożliwiająca szybkie wyszukiwanie sformatowanego tekstu, a nawet zastępowanie całego formatu tekstu w dokumencie.

Wybierz Wyszukiwanie zaawansowane na wstążce.

Znajdź i zamień okno dialogowe

Wprowadź tekst do znalezienia, a następnie kliknij przycisk Więcej, aby wyświetlić opcje zaawansowane, i kliknij przycisk Formatuj.

Zaawansowane opcje wyszukiwania

Wybierz opcję Czcionka w ustawieniach, a następnie możesz ustawić kolor tekstu, który chcesz znaleźć w dokumencie. Kliknij OK, aby zamknąć okno dialogowe Znajdź czcionkę.

Wybierz kolor tekstu w oknie dialogowym Znajdź czcionkę.

Kliknij Znajdź następny, a zobaczysz, że pierwsze wystąpienie szukanego tekstu w określonym kolorze zostanie wybrane.

Znajdź następny, aby znaleźć pierwsze wystąpienie.

Możemy również wykonywać bardziej skomplikowane wyszukiwania, używając symboli wieloznacznych. Jednak natywny moduł wyszukiwania Worda nie pozwala nam wyszukiwać tak, jak pytała Lissa.

Tam możemy przywołać RegEx do gry!

Biblioteka wyrażeń regularnych VBSCript

VBA nie jest dostarczany z obsługą wyrażeń regularnych. Jednak biblioteka Microsoft VBScript zawiera zaawansowane możliwości wyrażeń regularnych. Ta biblioteka jest częścią programu Internet Explorer 5.5 i nowszych, więc jest dostępna na wszystkich komputerach z systemem Windows XP, Vista, 7, 8, 8.1 lub 10.

Użytkownicy komputerów Mac

Ponieważ Internet Explorer nie jest aplikacją na komputery Mac, ta biblioteka nie istnieje na komputerze Mac. Dlatego poniższe przykłady VBA nie działają na komputerach Mac.

Aby użyć tej biblioteki w VBA, przejdź do VBE, wybierz Projekt i referencje w menu VBE, a następnie przewiń listę w dół, aby znaleźć pozycję „Wyrażenia regularne Microsoft VBScript 5.5” i zaznacz ją, aby uwzględnić ją w aplikacji.

Biblioteka wyrażeń regularnych VBScript

Wstaw nowy moduł, a następnie skopiuj i wklej następujący kod do tego modułu.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Ta procedura pobiera przykładowy tekst, wyszukuje kody produktów według podanego wzoru - który zaczyna się od „lis”, pojedynczej spacji i liczby, i drukuje dopasowane kody w oknie bezpośrednim (naciśnij Ctrl + G w VBE, jeśli tak nie jest widoczne już).

Dopasowane kody produktów wydrukowane w oknie bezpośrednim.

d+ klasa znaków we wzorcu definiuje jeden lub więcej znaków numerycznych, a wzorzec to w zasadzie prefiks „lis”, po którym następuje spacja, po której następują liczby.

Więcej informacji

Odwiedź stronę Język wyrażeń regularnych - skrócona instrukcja, aby uzyskać więcej informacji na temat ucieczki znaków, klas postaci i kotwic.

Skopiuj i wklej następujący kod, aby zobaczyć RegEx w akcji, aby usunąć spacje z kodów produktów.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Ta procedura zastępuje przykładową zawartość tekstową, usuwając spacje z kodów produktów dopasowanych do danego wzorca i drukuje tekst wynikowy w oknie bezpośrednim.

Zastąpiony tekst wydrukowany w oknie bezpośrednim.

Zwróć uwagę, że wzór jest nieco inny niż pierwszy kod. Terminy w tym wzorcu są ujęte w nawiasy, a odpowiadające im terminy są używane w metodzie Replace jako 1 $ i 2 $ w kolejności. Ta procedura po prostu łączy dwa terminy bez spacji.

Wracając do pytania

Wróćmy do przykładowego tekstu, którego użyliśmy na początku tego artykułu.

Przykładowy tekst

Musimy znaleźć „lis”, po którym następują znaki numeryczne i zmienić dopasowanie, używając koloru sekcji „lis” w dopasowanym tekście.

Chociaż wyrażenie regularne bardzo dobrze pasuje do podanego wzorca, nie może zastąpić koloru tekstu w dokumencie programu Word. Więc połączymy metody RegEx i Word VBA w poniższej procedurze.

Oto kroki:

  1. Znajdź dopasowania za pomocą wyrażenia regularnego.
  2. Przeszukuj każdy dopasowany tekst za pomocą metody Word Find.
  3. Znajdź kolor pierwszego słowa w znalezionym zakresie.
  4. Zmień kolor znalezionego zakresu na kolor z poprzedniego kroku.

Przełącz się na VBE i włóż nowy moduł. Upewnij się, że biblioteka wyrażeń regularnych VBScript została dodana do projektu i skopiuj i wklej następujący kod do tego nowego modułu.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Uruchom kod, a oto wynik.

Wynik

Pobierz plik Word

Aby pobrać plik Word: how-to-use-regex-in-microsoft-word.docm

RegEx w programie Excel?

W programie Excel całkowicie brakuje Regex. Jednak nadal możemy używać wyrażeń regularnych VBScript w Excel VBA.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Interesujące artykuły...