Регулярний вираз VBA

Зміст

Цей підручник покаже, як використовувати регулярний вираз у VBA.

Що таке регулярний вираз?

Regex означає регулярне вираження. Регулярний вираз - це шаблон, що складається з послідовності символів, які можна використовувати для пошуку відповідного шаблону в іншому рядку. Для того, щоб використовувати регулярний вираз у VBA, вам потрібно використовувати об'єкт RegExp.

Шаблон, такий як [A-C], можна використовувати для пошуку та відповідності великої літери від A до C у послідовності. Шаблони регулярних виразів мають власний синтаксис і можуть бути побудовані за допомогою символу або послідовності символів.

Відповідність персонажів

Наступна таблиця показує синтаксис, який дозволить вам створювати шаблони регулярних виразів.

Синтаксис шаблону Опис Приклад Знайдено відповідність
. Відповідає будь -якому окремому символу, крім 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”
\ s Відповідає будь -якому символу пробілу, такому як пробіли та табуляції \ s Було б відповідати "" у "Це"
\ S Відповідає будь-якому символу, що не є пробілом \ S Відповідає "T" та "h" у "T h"
\ d Відповідає будь -якій одиничній десятковій цифрі \ d Відповідає “7” у “a7h”
\ D Відповідає будь-якій одиничній недесятковій цифрі \ D Відповідає j у "47j"
\ Уникає спеціальних символів, що потім дозволяє шукати їх \. Було б відповідати "." у "59.pQ"
\ t Вкладка \ t Відповідатиме символу табуляції
\ r Повернення вагона \ r Відповідає поверненню каретки (vbCr)
\ n vbNewLine (vbTab) \ n Підійде до нового рядка

Квантори

Ви можете використовувати квантори, щоб вказати, скільки разів ви хочете, щоб шаблон відповідав рядку.

Квантор Опис Приклад Знайдено відповідність
* Відповідає нулю або більше входам fn*a fna, fa, fnna, fnnna, fnfnnna
+ Відповідає одному або кільком входам fn+a fna, fnna, fnfnna
? Відповідає нулю або одиниці fn? a fa, fna
{n} Багато разів відповідає «n» d \ W {4} Відповідатиме "d …". у “d…. & 5hi”
{n,} Відповідає принаймні "n" кількість разів d \ W {4,} Відповідатиме "d…. &" У "d…. & 5hi"
{n, m} Кількість разів відповідає n і m d \ W {1,8} Відповідатиме "d…. &&&&" у "d…. &&&& 5hi"

Групування

Групування або захоплення дозволяє використовувати шаблон для захоплення та вилучення частини рядка. Таким чином, не тільки шаблон узгоджується, але і частина рядка, яка відповідає шаблону, захоплюється.

Візерунок Опис Приклад Знайдені та захоплені збіги
(вираз) Групує та фіксує шаблон у дужках (\ W {4}) Згрупував би та захопив “@@@@” з “1 @@@@ 1jlmba”

Як використовувати регулярний вираз у VBA

Щоб використовувати регулярний вираз у VBA, спочатку потрібно встановити посилання в редакторі VBE. У редакторі VBE перейдіть до Інструменти> Посилання> Регулярні вирази Microsoft VBScript.

Ось властивості об’єкта RegExp:

  • Візерунок - Шаблон, який ви збираєтесь використовувати для зіставлення з рядком.
  • IgnoreCase - Якщо значення True, то відповідність ігнорує регістр літер.
  • Глобальні - Якщо значення True, то знайдуться всі збіги шаблону в рядку. Якщо False, то буде знайдено лише перше збіг.
  • MultiLine - Якщо значення "Істинна", узгодження зразків відбувається між розривами рядків.

Ось методи об’єкта RegExp:

  • Тестування - Шукає шаблон у рядку та повертає True, якщо знайдено відповідність.
  • Замінити - Замінює входження шаблону рядком заміни.
  • Виконати - Повертає збіги шаблону з рядком.

Тестування шаблону на відповідність рядку

Ви можете використовувати метод Test, щоб перевірити, чи відповідає шаблон шаблону послідовності у вхідному рядку. Результат є істинним, якщо знайдено відповідність. Наступний код покаже вам, як перевірити шаблон на рядок:

12345678910111213 Sub RegexTestingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Налагодження.Надрукувати regexOne.Test (stringOne)End Sub

Результат такий:

Заміна візерунка в рядку

Ви можете використовувати метод Replace, щоб замінити перший екземпляр відповідного шаблону в рядку або всі екземпляри відповідного шаблону в рядку. Якщо для Global встановлено значення False, замінюється лише перший екземпляр. Наступний код покаже вам, як замінити шаблон у рядку:

1234567891011 Sub RegexReplacingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "Це номер"regexOne.Global = НеправдаstringOne = "Це число 718901"Debug.Print regexOne.Replace (stringOne, "Це новий номер")End Sub

Результат такий:

Щоб замінити лише номерну частину рядка, що використовується вище, ви використаєте такий код:

1234567891011 Sub RegexReplacingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = НеправдаstringOne = "Це число 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub

Результат такий:

Щоб замінити кожен екземпляр певного шаблону в рядку, ви повинні встановити глобальне значення True. Наступний код показує, як замінити кожен екземпляр -A1289C- у рядку:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Яскравий рядок Один як рядокDim 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 regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "A.C"regexOne.Global = ПравдаregexOne.IgnoreCase = ІгноруватиCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Встановіть theMatches = regexOne.Execute (stringOne)Для кожного матчу в матчахDebug.Print Match.ValueДаліEnd Sub

Результат такий:

Скажімо, ми хотіли знайти тільки -ADC- з наведеного вище рядка. Наступний код показує, як зіставити та відобразити лише -ADC- з рядка:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Яскравий рядок Один як рядокDim regexOne As ObjectВстановити regexOne = Новий RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = НеправдаregexOne.IgnoreCase = ІгноруватиCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Встановіть theMatches = regexOne.Execute (stringOne)Для кожного матчу в матчахDebug.Print Match.ValueДаліEnd Sub

Вивчення регулярного виразу може зайняти деякий час, але це надзвичайно потужний інструмент для ідентифікації/маніпулювання рядками тексту. Він також широко використовується в мовах програмування.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave