VBA Regex

Содержание

В этом руководстве будет показано, как использовать Regex в VBA.

Что такое регулярное выражение?

Regex означает регулярное выражение. Регулярное выражение - это шаблон, состоящий из последовательности символов, который можно использовать для поиска соответствующего шаблона в другой строке. Чтобы использовать Regex в VBA, вы должны использовать объект RegExp.

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

Соответствующие персонажи

В следующей таблице показан синтаксис, который позволит вам создавать шаблоны Regex.

Синтаксис шаблона Описание Пример Найдено совпадений
. Соответствует любому одиночному символу, кроме 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»
\ т Вкладка \ т Соответствует символу табуляции
Возврат каретки Соответствует возврату каретки (vbCr)
\ п vbNewLine (vbTab) \ п Соответствует новой строке

Квантификаторы

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

Квантификатор Описание Пример Найдено совпадений
* Соответствует нулю или более вхождений fn * a fna, fa, fnna, fnnna, fnfnnna
+ Соответствует одному или нескольким вхождениям fn + a fna, fnna, fnfnna
? Соответствует нулю или единице fn? a фа, фна
{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

Чтобы использовать Regex в VBA, сначала необходимо установить ссылку в редакторе VBE. В редакторе VBE перейдите в Инструменты> Ссылки> Регулярные выражения Microsoft VBScript.

Это свойства объекта RegExp:

  • Шаблон - Шаблон, который вы собираетесь использовать для сопоставления со строкой.
  • IgnoreCase - Если True, то при сопоставлении регистр букв не учитывается.
  • Глобальный - Если True, то будут найдены все совпадения с шаблоном в строке. Если False, то найдено только первое совпадение.
  • MultiLine - Если True, сопоставление с образцом происходит через разрывы строк.

Это методы объекта RegExp:

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

Проверка шаблона на совпадение со строкой

Вы можете использовать метод Test, чтобы проверить, соответствует ли шаблон последовательности во входной строке. Если совпадение найдено, результатом будет True. Следующий код покажет вам, как проверить шаблон на строке:

12345678910111213 Sub RegexTestingAPattern ()Тусклая строка: одна строкаDim regexOne как объектУстановить regexOne = New RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Отладка.Печать regexOne.Test (stringOne)Конец подписки

Результат:

Замена шаблона в строке

Вы можете использовать метод Replace для замены первого экземпляра совпадающего шаблона в строке или всех экземпляров совпадающего шаблона в строке. Если для Global установлено значение False, заменяется только первый экземпляр. Следующий код покажет вам, как заменить шаблон в строке:

1234567891011 Sub RegexReplacingAPattern ()Тусклая строка: одна строкаDim regexOne как объектУстановить regexOne = New RegExpregexOne.Pattern = "Это число"regexOne.Global = ЛожьstringOne = "Это номер 718901"Debug.Print regexOne.Replace (stringOne, «Это новый номер»)Конец подписки

Результат:

Чтобы заменить только числовую часть строки, использованной выше, вы должны использовать следующий код:

1234567891011 Sub RegexReplacingAPattern ()Тусклая строка: одна строкаDim regexOne как объектУстановить regexOne = New RegExpregexOne.Pattern = "[\ D] +"regexOne.Global = ЛожьstringOne = "Это номер 718901"Debug.Print regexOne.Replace (stringOne, "777192")Конец подписки

Результат:

Чтобы заменить каждый экземпляр определенного шаблона в строке, вы должны установить глобальное значение в True. В следующем коде показано, как заменить каждый экземпляр -A1289C- в строке:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Тусклая строка: одна строкаDim regexOne как объектУстановить regexOne = New RegExpregexOne.Pattern = "\ W \ A \ d + C \ W"regexOne.Global = ИстинаstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Конец подписки

Сопоставление и отображение шаблона в строке

Вы можете использовать метод Execute для сопоставления одного или всех экземпляров шаблона в строке. В следующем коде показано, как сопоставить и отобразить все экземпляры шаблона из строки:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Тусклая строка: одна строкаDim regexOne как объектУстановить regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = ИстинаregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Установите theMatches = regexOne.Execute (stringOne)За каждый матч в матчахDebug.Print Match.ValueСледующийКонец подписки

Результат:

Допустим, мы хотели сопоставить -ADC- только из приведенной выше строки. В следующем коде показано, как сопоставить и отобразить только -ADC- из строки:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Тусклая строка: одна строкаDim regexOne как объектУстановить regexOne = New RegExpregexOne.Pattern = "\ - \ A.C \ -"regexOne.Global = ЛожьregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Установите theMatches = regexOne.Execute (stringOne)За каждый матч в матчахDebug.Print Match.ValueСледующийКонец подписки

Для изучения регулярного выражения может потребоваться некоторое время, но это чрезвычайно мощный инструмент для идентификации / управления строками текста. Он также широко используется в языках программирования.

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

wave wave wave wave wave