Wyrażenie regularne VBA

Spisie treści

Ten samouczek pokaże, jak używać Regex w VBA.

Co to jest Regex?

Regex oznacza wyrażenie regularne. Wyrażenie regularne to wzorzec złożony z sekwencji znaków, którego można użyć do znalezienia pasującego wzorca w innym ciągu. Aby użyć Regex w VBA, musisz użyć obiektu RegExp.

Wzorzec taki jak [A-C] może służyć do wyszukiwania i dopasowywania wielkich liter od A do C z sekwencji. Wzorce regex mają własną składnię i mogą być budowane przy użyciu znaku lub sekwencji znaków.

Dopasowanie znaków

Poniższa tabela przedstawia składnię, która pozwoli Ci zbudować wzorce Regex.

Składnia wzorca Opis Przykład Znaleziono mecze
. Dopasowuje dowolny pojedynczy znak z wyjątkiem vbNewLine f.n wentylator, fon, f@n, fwn
[postacie] Dopasowuje dowolny pojedynczy znak w nawiasach [] [fn] Dopasuje tylko „f” lub „n” w fan
[^znaki] Dopasowuje dowolny pojedynczy znak, który nie znajduje się w nawiasach [] [^fn] Więc pasuje do „j” w „fjn”
[początek Koniec] Dopasowuje dowolny znak, który jest częścią zakresu w nawiasach [] [1-5] Dopasuje „4” i „5” w „45”
\w Dopasowuje znaki alfanumeryczne i podkreślenie, ale nie spację \w Dopasuje „c” do „,c”.
\W Dopasowuje dowolne znaki niealfanumeryczne i podkreślenie \W Dopasuje „@” do „bb@bb”
\s Dopasowuje dowolny znak odstępu, taki jak spacje i tabulatory \s Pasowałby do „ ” w „To jest”
\S Dopasowuje dowolny znak inny niż biały znak \S Dopasuje „T” i „h” w „T h”
\D Dopasowuje dowolną pojedynczą cyfrę dziesiętną \D Dopasuje „7” w „a7h”
\D Dopasowuje dowolną pojedynczą cyfrę niedziesiętną \D Dopasuje j w „47j”
\ Ucieka znaki specjalne, co pozwala na ich wyszukiwanie \. Pasowałby do „.” w „59.pQ”
\T Patka \T Pasowałby do znaku tabulacji
\r Zwrot karetki \r Pasowałby do powrotu karetki (vbCr)
\n vbNowaLinia(vbTab) \n Pasowałby do nowej linii

Kwantyfikatory

Możesz użyć kwantyfikatorów, aby określić, ile razy wzór ma być dopasowany do ciągu.

Kwantyfikator Opis Przykład Znaleziono mecze
* Dopasowuje zero lub więcej wystąpień fn*a fna, fa, fna, fnnna, fnfnnna
+ Dopasowuje jedno lub więcej wystąpień fn+a fna, fna, fnfna
? Dopasowuje zero lub jeden fn?a fa, fna
{n} Dopasowuje „n” wiele razy d\W{4} Pasowałby do „d…”. w „d… .&5hi”
{n,} Dopasowuje co najmniej „n” razy d\W{4,} Dopasuje „d… .&” w „d… .&5hi”
{n,m} Dopasowania między n i m razy d\W{1,8} Dopasuje „d… .&&&&” w „d… .&&&&&5hi”

Grupowanie

Grupowanie lub przechwytywanie umożliwia wykorzystanie wzorca do przechwytywania i wyodrębniania fragmentu ciągu. Tak więc dopasowywany jest nie tylko wzorzec, ale przechwycona jest część łańcucha, która pasuje do wzorca.

Wzór Opis Przykład Znalezione i przechwycone zapałki
(wyrażenie) Grupuje i wychwytuje wzór w nawiasie (\W{4}) Pogrupuje i przechwyci „@@@@” z „1@@@@1jlmba”

Jak korzystać z Regex w VBA?

Aby używać Regex w VBA, musisz najpierw ustawić odwołanie w edytorze VBE. W edytorze VBE przejdź do Narzędzia > Referencje > Wyrażenia regularne Microsoft VBScript.

Oto właściwości obiektu RegExp:

  • Wzór - Wzór, którego zamierzasz użyć do dopasowania do ciągu.
  • Ignoruj ​​sprawę - Jeśli True, to dopasowanie ignoruje wielkość liter.
  • Światowy - Jeśli True, to zostaną znalezione wszystkie dopasowania wzorca w ciągu. Jeśli False, to zostanie znaleziony tylko pierwszy odpowiednik.
  • Multilinia - Jeśli True, dopasowywanie wzorców odbywa się w przerwach linii.

Oto metody obiektu RegExp:

  • Test - Wyszukuje wzorzec w ciągu i zwraca True, jeśli zostanie znalezione dopasowanie.
  • Zastępować - Zastępuje wystąpienia wzorca ciągiem zastępczym.
  • Wykonać - Zwraca dopasowania wzorca do ciągu.

Testowanie wzorca pod kątem dopasowania ze struną

Możesz użyć metody Test, aby sprawdzić, czy wzorzec pasuje do sekwencji w ciągu wejściowym. Wynikiem jest True, jeśli zostanie znalezione dopasowanie. Poniższy kod pokaże Ci, jak przetestować wzorzec na łańcuchu:

12345678910111213 Wzorzec testujący podrzędną regułę regularną()Dim stringOne As StringDim regexOne jako obiektUstaw regexOne = Nowe wyrażenie regularneregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test(stringOne)Napis końcowy

Wynik to:

Zastępowanie wzorca w ciągu

Możesz użyć metody Replace, aby zastąpić pierwsze wystąpienie pasującego wzorca w ciągu lub wszystkie wystąpienia pasującego wzorca w ciągu. Jeśli Global jest ustawiony na False, zastępowane jest tylko pierwsze wystąpienie. Poniższy kod pokaże Ci, jak zastąpić wzorzec w ciągu:

1234567891011 Sub RegexZastępując wzorzec()Dim stringOne As StringDim regexOne jako obiektUstaw regexOne = Nowe wyrażenie regularneregexOne.Pattern = "To jest liczba"regexOne.Globalny = FałszstringOne = "To jest numer 718901"Debug.Print regexOne.Replace(stringOne, "To jest nowa liczba")Napis końcowy

Wynik to:

Aby zastąpić tylko część liczbową ciągu użytego powyżej, użyjesz następującego kodu:

1234567891011 Sub RegexZastępując wzorzec()Dim stringOne As StringDim regexOne jako obiektUstaw regexOne = Nowe wyrażenie regularneregexOne.Pattern = "[^\D]+"regexOne.Globalny = FałszstringOne = "To jest numer 718901"Debug.Print regexOne.Replace(stringOne, "777192")Napis końcowy

Wynik to:

Aby zastąpić każde wystąpienie określonego wzorca w ciągu, należy ustawić wartość globalną na True. Poniższy kod pokazuje, jak zastąpić każde wystąpienie -A1289C- w ciągu:

1234567891011 Sub RegexReplacingEveryInstanceOfApattern()Dim stringOne As StringDim regexOne jako obiektUstaw regexOne = Nowe wyrażenie regularneregexOne.Pattern = "\W\A\d+C\W"regexOne.Globalny = PrawdastringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace(stringOne, "IJK")Napis końcowy

Dopasowywanie i wyświetlanie wzoru w łańcuchu

Możesz użyć metody Execute, aby dopasować jedno lub wszystkie wystąpienia wzorca w ciągu. Poniższy kod pokazuje, jak dopasować i wyświetlić wszystkie wystąpienia wzorca z ciągu:

123456789101112131415161718 Podrzędne dopasowanie i wyświetlanie wzorca wyrażenia regularnego()Dim stringOne As StringDim regexOne jako obiektUstaw regexOne = Nowe wyrażenie regularneregexOne.Wzór = "AC"regexOne.Globalny = PrawdaregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Ustaw dopasowania = regexOne.Execute(stringOne)Dla każdego meczu w meczachDebug.Print Match.ValueNastępnyNapis końcowy

Wynik to:

Powiedzmy, że chcieliśmy dopasować tylko -ADC- z powyższego ciągu. Poniższy kod pokazuje, jak dopasować i wyświetlić tylko -ADC- z ciągu:

123456789101112131415161718 Podrzędne dopasowanie i wyświetlanie wzorca wyrażenia regularnego()Dim stringOne As StringDim regexOne jako obiektUstaw regexOne = Nowe wyrażenie regularneregexOne.Pattern = "\-\A.C\-"regexOne.Globalny = FałszregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Ustaw dopasowania = regexOne.Execute(stringOne)Dla każdego meczu w meczachDebug.Print Match.ValueNastępnyNapis końcowy

Regex może zająć trochę czasu, ale jest to niezwykle potężne narzędzie do identyfikacji/manipulowania ciągami tekstu. Jest również szeroko stosowany w językach programowania.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave