Регулярные выражения в VBA Excel. Объекты RegExp, Match, Matches Collection и их свойства. Символы и метасимволы. Создание объекта RegExp с ранней, поздней привязкой и его методы.
В VBA Excel для работы с регулярными выражениями используется библиотека «Microsoft VBScript Regular Expression».
Создание объекта RegExp
Ранняя привязка
Обычно рекомендуется использовать объекты с ранней привязкой, так как у них выше быстродействие, а также при написании и редактировании кода доступны подсказки в виде листа свойств-методов, появляющегося автоматически или вызываемого, при необходимости, сочетанием клавиш Ctrl+Пробел.
Раннее связывание заключается в присвоении нового экземпляра объекта RegExp переменной, уже объявленной, как переменная определенного типа (в нашем случае, как RegExp).
Для осуществления ранней привязки необходимо подключить к проекту VBA ссылку на библиотеку «Microsoft VBScript Regular Expression», для чего в редакторе VBA выбираем Tools — References…
В открывшемся окне «References» находим строку «Microsoft VBScript Regular Expression 5.5» (если у вас ее нет, то строку «Microsoft VBScript Regular Expression 1.0»), отмечаем ее галочкой и нажимаем «ОК».
Готово — ссылка добавлена.
Создание объекта RegExp с ранней привязкой:
1 2 3 4 5 6 |
'Вариант 1 Dim myRegExp As RegExp Set myRegExp = New RegExp '------------------------- 'Вариант 2 Dim myRegExp As New RegExp |
Поздняя привязка
Позднее связывание заключается в присвоении нового экземпляра объекта RegExp переменной, объявленной как Object, с помощью функции CreateObject.
Создание объекта RegExp с поздней привязкой:
1 2 |
Dim myRegExp As Object Set myRegExp = CreateObject("VBScript.RegExp") |
Свойства и методы объекта RegExp
Свойства объекта RegExp
Свойство | Описание | Значение по умолчанию |
---|---|---|
Global | Определяет продолжительность поиска: False — до первого совпадения True — по всему тексту |
False |
IgnoreCase | Определяет чувствительность к регистру символов: False — учитывать регистр True — не учитывать регистр |
False |
Multiline | Определяет структуру объекта: False — однострочный True — многострочный |
False |
Pattern | Строка, используемая как шаблон | Пустая строка |
Свойства объекта RegExp доступны для чтения и записи.
Методы объекта RegExp
Метод | Синтаксис | Описание |
---|---|---|
Execute | Execute(myStr) myStr — строка для поиска |
Возвращает коллекцию найденных по шаблону подстрок в виде агрегатного объекта |
Replace | Replace(myStr,myRep) myStr — строка для поиска myRep — строка для замены |
Возвращает строку, в которой найденные по шаблону вхождения в исходной строке заменены на указанную подстроку. |
Test | Test(myText) myText — строка для проверки |
Возвращает булево значение как результат проверки соответствия строки шаблону |
Свойства объектов Match и Matches Collection
Метод Execute объекта RegExp возвращает агрегатный объект Matches Collection, который содержит коллекцию объектов Match, представляющих все совпадения, найденные механизмом регулярных выражений, в том порядке, в котором они присутствуют в исходной строке. Если совпадений нет, метод возвращает объект Matches Collection без членов.
Свойства объекта Matches Collection
Свойство | Описание |
---|---|
Count | Количество объектов Match, содержащихся в объекте Matches Collection |
Item | Индекс члена коллекции от нуля до значения свойства Count минус 1 |
Свойства объекта Matches Collection доступны только для чтения.
Свойства объекта Match
Свойство | Описание |
---|---|
FirstIndex | Позиция в исходной строке, где произошло совпадение, причем первая позиция в строке равна нулю |
Length | Длина совпавшей подстроки |
Value | Найденная подстрока (является свойством по умолчанию) |
Свойства объекта Match доступны только для чтения.
Символы и метасимволы
Все знаки, используемые для составления шаблонов, обычно делят на символы и метасимволы. Символы — это знаки, которые в шаблонах обозначают сами себя, а метасимволы (спецсимволы) — знаки, имеющие другое значение. Метасимволы могут использоваться как отдельно, так и в сочетании с другими символами и спецсимволами.
Таблица основных метасимволов и их сочетаний с другими символами
Метасимвол (сочетание символов) |
Значение |
---|---|
\ | После этого знака метасимвол обозначает сам себя, а некоторые символы приобретают другое значение |
^ | Начало строки |
$ | Конец строки |
? | Ни одного или один любой символ |
* | Ни одного или несколько любых символов |
+ | Один или несколько любых символов |
. | Любой символ, кроме знака «новая строка» |
— | Определяет интервал символов |
| | Знак «или» |
{n} | Точное количество символов, стоящих перед {n} |
{n,m} | Количество от n до m символов, стоящих перед {n,m} |
[abc] | Любой из указанных символов |
[^abc] | Любой из неуказанных символов |
[a-z] | Любой символ из диапазона |
[^a-z] | Любой символ, не входящий в диапазон |
\b | Конец слова |
\B | Не конец слова |
\d | Цифра |
\D | Не цифра |
\w | Любая буква, цифра или знак подчеркивания |
\W | Не буква, не цифра и не знак подчеркивания |
\s | Пробел |
\S | Не пробел |
В таблицу не включены редко используемые сочетания, ознакомиться с которыми можно в справочной системе разработчика. А примеры использования метасимволов в шаблонах очень хорошо представлены на этом ресурсе в разделе 4. Метасимволы.
Пример использования RegExp
Пример использования регулярных выражений в VBA Excel для извлечения email-адресов из текстового файла.
Для извлечения текстовой информации из файла в переменную используется функция GetText, которую вы можете скопировать из статьи Парсинг сайтов, html-страниц и файлов.
В файл «Новый документ.txt» вставлен произвольный текст с четырьмя примерами email-адресов, которые необходимо извлечь.
Код VBA Excel для извлечения email-адресов из текстового файла с помощью регулярных выражений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub Primer() Dim htmlText As String, myRegExp As Object, myObj As Object, myStr1 As Object, myStr2 As String 'Присваиваем переменной htmlText текстовую информацию из файла "Новый документ.txt" htmlText = GetText("C:\Users\Evgeniy\Downloads\Новый документ.txt") 'Присваиваем переменной myRegExp ссылку на новый экземпляр RegExp Set myRegExp = CreateObject("VBScript.RegExp") With myRegExp 'Задаем поиск по всему тексту .Global = True 'Задаем шаблон поиска .Pattern = "([\w\.-]+)@([\w\.-]+)\.([A-Za-z]{2,6})" 'Присваиваем переменной myObj коллекцию найденных по шаблону email-адресов Set myObj = .Execute(htmlText) End With For Each myStr1 In myObj 'Извлекаем email-адреса из коллекции myObj по очереди в объектную переменную myStr1 'и записываем их построчно в текстовую переменную myStr2 myStr2 = myStr2 & myStr1 & vbNewLine Next 'Смотрим, что получилось MsgBox myStr2 End Sub |
У меня результат работы кода выглядел так:
Спасибо
А замена в тексте регулярными выражениями с примерами?
Обсуждение закрыто.