VBA Regex

Съдържание

Този урок ще покаже как да използвате Regex във VBA.

Какво е Regex?

Regex означава регулярно изразяване. Регулярният израз е модел, съставен от поредица от знаци, които можете да използвате, за да намерите съвпадащ модел в друг низ. За да използвате Regex във VBA, трябва да използвате обекта RegExp.

Модел като [A-C] може да се използва за търсене и съответствие на главни букви от A до C от последователност. Моделите на регулярни изрази имат свой собствен синтаксис и могат да бъдат изградени с помощта на знак или последователност от знаци.

Съответстващи знаци

Следващата таблица показва синтаксиса, който ще ви позволи да изграждате модели на регулярни изрази.

Pattern Syntax Описание Пример Открити съвпадения
. Съвпада с всеки един символ, с изключение на vbNewLine f.n фен, fon, f@n, fwn
[персонажи] Съвпада с всеки един символ между скобите [] [fn] Ще съвпада само с „f“ или „n“ във вентилатора
[^знаци] Съвпада с всеки единичен знак, който не е между скобите [] [^fn] Така че би съвпаднало с „j“ в „fjn“
[начало-край] Съвпада с всеки знак, който е част от диапазона в скоби [] [1-5] Ще съответства на „4“ и „5“ в „45“
\ w Съответства на буквено -цифровите знаци и долната черта, но не и на интервала \ w Ще съответства на „c“ в „, c“.
\ W Съвпада с всякакви буквено-цифрови знаци и долната черта \ W Ще съответства на „@“ в „bb@bb“
Съвпада с всеки знак с интервал, като интервали и раздели Би съвпаднал ”” в „Това е”
Съвпада с всеки знак, който не е бял интервал Съответства на „T“ и „h“ в „T h“
Съвпада с всяка една десетична цифра Ще съответства на „7“ в „a7h“
Съвпада с всяка единична недесетична цифра Ще съвпадне с j в „47j“
\ Избягва специални знаци, което след това ви позволява да ги търсите \. Ще съвпадне с „.“ в „59.pQ“
\T Раздел \T Ще съответства на табулатор
\ r Връщане на карета \ r Ще съответства на връщане на каретка (vbCr)
vbNewLine (vbTab) Ще отговаря на нов ред

Квантори

Можете да използвате квантори, за да посочите колко пъти искате моделът да съвпада с низа.

Квантификатор Описание Пример Открити съвпадения
* Съвпада с нула или повече събития fn*a fna, fa, fnna, fnnna, fnfnnna
+ Съответства на едно или повече събития fn+a fna, fnna, fnfnna
? Съвпада с нула или единица fn? a fa, fna
{н} Съвпада с „n“ много пъти d \ W {4} Ще съвпадне с „d…“. в „d…. & 5hi“
{н,} Съвпада поне „n“ брой пъти d \ W {4,} Съответства на „d…. &“ В „d…. & 5hi“
{n, m} Съвпада между n и m брой пъти d \ W {1,8} Съответства на „d…. &&&&“ в „d…. &&&& 5hi“

Групиране

Групирането или улавянето ви позволява да използвате модел за улавяне и извличане на част от низ. Така че не само моделът е съчетан, но и частта от низа, която съответства на шаблона, се улавя.

модел Описание Пример Открити и уловени съвпадения
(израз) Групира и улавя модела в скоби (\ W {4}) Бихте ли групирали и заснели „@@@@“ от „1 @@@@ 1jlmba“

Как да използвате Regex във VBA

За да използвате Regex във VBA, първо трябва да зададете препратката в редактора на VBE. В редактора на VBE отидете на Инструменти> Препратки> Регулярни изрази на Microsoft VBScript.

Това са свойствата на обекта RegExp:

  • модел - Моделът, който ще използвате за съвпадение с низ.
  • IgnoreCase - Ако е вярно, съвпадението игнорира буквите.
  • Глобални - Ако е вярно, тогава се намират всички съвпадения на шаблона в низа. Ако е невярно, се открива само първото съвпадение.
  • MultiLine - Ако е вярно, съвпадението на шаблони се случва между редовете.

Това са методите на обекта RegExp:

  • Тест - Търси модел в низ и връща True, ако се намери съвпадение.
  • Заменете - Заменя появата на шаблона със заменящия низ.
  • Изпълни - Връща съвпадения на шаблона срещу низ.

Тестване на модел за съвпадение срещу низ

Можете да използвате метода Test, за да проверите дали даден модел съответства на последователност във входния низ. Резултатът е истина, ако се намери съвпадение. Следният код ще ви покаже как да тествате модел срещу низ:

12345678910111213 Sub RegexTestingAPattern ()Dim stringOne As StringDim regexOne As ObjectЗадайте regexOne = Нов RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)End Sub

Резултатът е:

Замяна на модел в низ

Можете да използвате метода Replace, за да замените първия екземпляр на съвпадащ модел в низ или всички копия на съвпадащ модел в низ. Ако Global е зададено на False, тогава само първата инстанция се заменя. Следният код ще ви покаже как да замените модел в низ:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectЗадайте regexOne = Нов RegExpregexOne.Pattern = "Това е числото"regexOne.Global = FalsestringOne = "Това е числото 718901"Debug.Print regexOne.Replace (stringOne, "Това е новият номер")End Sub

Резултатът е:

За да замените само частта от низа, използвана по -горе, бихте използвали следния код:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectЗадайте regexOne = Нов RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = FalsestringOne = "Това е числото 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub

Резултатът е:

За да замените всеки екземпляр от определен модел в низ, трябва да зададете глобалната стойност на True. Следният код ви показва как да замените всеки екземпляр на -A1289C- в низа:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne As ObjectЗадайте regexOne = Нов RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = ВярноstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub

Съпоставяне и показване на модел в низ

Можете да използвате метода Execute за съвпадение на един или всички екземпляри на модел в низ. Следният код ви показва как да съпоставите и покажете всички екземпляри на шаблона от низ:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectЗадайте regexOne = Нов RegExpregexOne.Pattern = "A.C"regexOne.Global = ВярноregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Задайте мачовете = regexOne.Execute (stringOne)За всеки мач в мачоветеDebug.Print Match.ValueСледващияEnd Sub

Резултатът е:

Да кажем, че искахме само да съпоставим -ADC- от горния низ. Следният код показва как да съответства и показва само -ADC- от низа:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectЗадайте regexOne = Нов RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Задайте мачовете = regexOne.Execute (stringOne)За всеки мач в мачоветеDebug.Print Match.ValueСледващияEnd Sub

Regex може да отнеме известно време, за да се научи, но това е изключително мощен инструмент за идентифициране/манипулиране на низове текст. Той също се използва широко в езиците за програмиране.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave