Regular expressions in excel

Разбор текста регулярными выражениямиОдной из самых трудоемких и неприятных задач при работе с текстом в Excel является парсинг — разбор буквенно-цифровой «каши» на составляющие и извлечение из нее нужных нам фрагментов. Например:

  • извлечение почтового индекса из адреса (хорошо, если индекс всегда в начале, а если нет?)
  • нахождение номера и даты счета из описания платежа в банковской выписке
  • извлечение ИНН из разношерстных описаний компаний в списке контрагентов
  • поиск номера автомобиля или артикула товара в описании и т.д.

Обычно во подобных случаях, после получасового муторного ковыряния в тексте вручную, в голову начинают приходить мысли как-то автоматизировать этот процесс (особенно если данных много). Решений тут несколько и с разной степенью сложности-эффективности:

  • Использовать встроенные текстовые функции Excel для поиска-нарезки-склейки текста: ЛЕВСИМВ (LEFT), ПРАВСИМВ (RIGHT), ПСТР (MID), СЦЕПИТЬ (CONCATENATE) и ее аналоги, ОБЪЕДИНИТЬ (JOINTEXT), СОВПАД (EXACT) и т.д. Этот способ хорош, если в тексте есть четкая логика (например, индекс всегда в начале адреса). В противном случае формулы существенно усложняются и, порой, дело доходит даже до формул массива, что сильно тормозит на больших таблицах.
  • Использование оператора проверки текстового подобия Like из Visual Basic, обернутого в пользовательскую макро-функцию. Это позволяет реализовать более гибкий поиск с использованием символов подстановки (*,#,? и т.д.) К сожалению, этот инструмент не умеет извлекать нужную подстроку из текста — только проверять, содержится ли она в нем.

Кроме вышеперечисленного, есть еще один подход, очень известный в узких кругах профессиональных программистов, веб-разработчиков и прочих технарей — это регулярные выражения (Regular Expressions = RegExp = «регэкспы» = «регулярки»). Упрощенно говоря, RegExp — это язык, где с помощью специальных символов и правил производится поиск нужных подстрок в тексте, их извлечение или замена на другой текст. Регулярные выражения — это очень мощный и красивый инструмент, на порядок превосходящий по возможностям все остальные способы работы с текстом. Многие языки программирования (C#, PHP, Perl, JavaScript…) и текстовые редакторы (Word, Notepad++…) поддерживают регулярные выражения.

Microsoft Excel, к сожалению, не имеет поддержки RegExp по-умолчанию «из коробки», но это легко исправить с помощью VBA. Откройте редактор Visual Basic с вкладки Разработчик (Developer) или сочетанием клавиш Alt+F11. Затем вставьте новый модуль через меню Insert — Module и скопируйте туда текст вот такой макрофункции:

Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
    On Error GoTo ErrHandl
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = Pattern
    regex.Global = True
    If regex.Test(Text) Then
        Set matches = regex.Execute(Text)
        RegExpExtract = matches.Item(Item - 1)
        Exit Function
    End If
ErrHandl:
    RegExpExtract = CVErr(xlErrValue)
End Function

Теперь можно закрыть редактор Visual Basic и, вернувшись в Excel, опробовать нашу новую функцию. Синтаксис у нее следующий:

=RegExpExtract( Txt ; Pattern ; Item )

где

  • Txt — ячейка с текстом, который мы проверяем и из которого хотим извлечь нужную нам подстроку
  • Pattern — маска (шаблон) для поиска подстроки
  • Item — порядковый номер подстроки, которую надо извлечь, если их несколько (если не указан, то выводится первое вхождение)

Самое интересное тут, конечно, это Pattern — строка-шаблон из спецсимволов «на языке» RegExp, которая и задает, что именно и где мы хотим найти. Вот самые основные из них — для начала:

 Паттерн  Описание
 . Самое простое — это точка. Она обозначает любой символ в шаблоне на указанной позиции.
 s Любой символ, выглядящий как пробел (пробел, табуляция или перенос строки).
 S Анти-вариант предыдущего шаблона, т.е. любой НЕпробельный символ.
 d Любая цифра
 D Анти-вариант предыдущего, т.е. любая НЕ цифра
 w Любой символ латиницы (A-Z), цифра или знак подчеркивания
 W Анти-вариант предыдущего, т.е. не латиница, не цифра и не подчеркивание.
[символы] В квадратных скобках можно указать один или несколько символов, разрешенных на указанной позиции в тексте. Например ст[уо]л будет соответствовать любому из слов: стол или стул.
Также можно не перечислять символы, а задать их диапазоном через дефис, т.е. вместо [ABDCDEF] написать [A-F]. или вместо [4567] ввести [4-7]. Например, для обозначения всех символов кириллицы можно использовать шаблон [а-яА-ЯёЁ].
[^символы] Если после открывающей квадратной скобки добавить символ «крышки» ^, то набор приобретет обратный смысл — на указанной позиции в тексте будут разрешены все символы, кроме перечисленных. Так, шаблон [^ЖМ]уть найдет Путь или Суть или Забудь, но не Жуть или Муть, например.
 | Логический оператор ИЛИ (OR) для проверки по любому из указанных критериев. Например чет|счёт|invoice) будет искать в тексте любое из указанных слов. Обычно набор вариантов заключается в скобки.
 ^ Начало строки
 $ Конец строки
 b Край слова

Если мы ищем определенное количество символов, например, шестизначный почтовый индекс или все трехбуквенные коды товаров, то на помощь нам приходят квантификаторы или кванторы — специальные выражения, задающие количество искомых знаков. Квантификаторы применяются к тому символу, что стоит перед ним:

  Квантор  Описание
 ? Ноль или одно вхождение. Например .? будет означать один любой символ или его отсутствие.
 + Одно или более вхождений. Например d+ означает любое количество цифр (т.е. любое число от 0 до бесконечности).
 * Ноль или более вхождений, т.е. любое количество. Так s* означает любое количество пробелов или их отсутствие.
{число} или
{число1,число2}
Если нужно задать строго определенное количество вхождений, то оно задается в фигурных скобках. Например d{6} означает строго шесть цифр, а шаблон s{2,5} — от двух до пяти пробелов

Теперь давайте перейдем к самому интересному — разбору применения созданной функции и того, что узнали о паттернах на практических примерах из жизни.

Извлекаем числа из текста

Для начала разберем простой случай — нужно извлечь из буквенно-цифровой каши первое число, например мощность источников бесперебойного питания из прайс-листа:

Извлекаем первое число из текста

Логика работы регулярного выражения тут простая: d — означает любую цифру, а квантор + говорит о том, что их количество должно быть одна или больше. Двойной минус перед функцией нужен, чтобы «на лету» преобразовать извлеченные символы в полноценное число из числа-как-текст.

Почтовый индекс

На первый взгляд, тут все просто — ищем ровно шесть цифр подряд. Используем спецсимвол d для цифры и квантор {6} для количества знаков:

Извлекаем почтовый индекс

Однако, возможна ситуация, когда левее индекса в строке стоит еще один большой набор цифр подряд (номер телефона, ИНН, банковский счет и т.д.) Тогда наша регулярка выдернет из нее первых 6 цифр, т.е. сработает некорректно:

Ошибочное извлечение индекса

Чтобы этого не происходило, необходимо добавить в наше регулярное выражение по краям модификатор b означающий конец слова. Это даст понять Excel, что нужный нам фрагмент (индекс) должен быть отдельным словом, а не частью другого фрагмента (номера телефона):

Извлекаем ровно 6-разрядное число

Телефон

Проблема с нахождением телефонного номера среди текста состоит в том, что существует очень много вариантов записи номеров — с дефисами и без, через пробелы, с кодом региона в скобках или без и т.д. Поэтому, на мой взгляд, проще сначала вычистить из исходного текста все эти символы с помощью нескольких вложенных друг в друга функций ПОДСТАВИТЬ (SUBSTITUTE), чтобы он склеился в единое целое, а потом уже примитивной регуляркой d{11} вытаскивать 11 цифр подряд:

Вытаскиваем номер телефона из текста

ИНН

Тут чуть сложнее, т.к. ИНН (в России) бывает 10-значный (у юрлиц) или 12-значный (у физлиц). Если не придираться особо, то вполне можно удовлетвориться регуляркой d{10,12}, но она, строго говоря, будет вытаскивать все числа от 10 до 12 знаков, т.е. и ошибочно введенные 11-значные. Правильнее будет использовать два шаблона, связанных логическим ИЛИ оператором | (вертикальная черта):

Извлечение ИНН из текстовой строки

Обратите внимание, что в запросе мы сначала ищем 12-разрядные, и только потом 10-разрядные числа. Если же записать нашу регулярку наоборот, то она будет вытаскивать для всех, даже длинных 12-разрядных ИНН, только первые 10 символов. То есть после срабатывания первого условия дальнейшая проверка уже не производится:

Некорректное извлечение ИНН

Это принципиальное отличие оператора | от стандартной экселевской логической функции ИЛИ (OR), где от перестановки аргументов результат не меняется.

Артикулы товаров

Во многих компаниях товарам и услугам присваиваются уникальные идентификаторы — артикулы, SAP-коды, SKU и т.д. Если в их обозначениях есть логика, то их можно легко вытаскивать из любого текста с помощью регулярных выражений. Например, если мы знаем, что наши артикулы всегда состоят из трех заглавных английских букв, дефиса и последующего трехразрядного числа, то:

Артикулы

Логика работы шаблона тут проста. [A-Z] — означает любые заглавные буквы латиницы. Следующий за ним квантор {3} говорит о том, что нам важно, чтобы таких букв было именно три. После дефиса мы ждем три цифровых разряда, поэтому добавляем на конце d{3}

Денежные суммы

Похожим на предыдущий пункт образом, можно вытаскивать и цены (стоимости, НДС…) из описания товаров. Если денежные суммы, например, указываются через дефис, то:

Извлечь стоимость (цену) из текста

Паттерн d с квантором + ищет любое число до дефиса, а d{2} будет искать копейки (два разряда) после.

Если нужно вытащить не цены, а НДС, то можно воспользоваться третьим необязательным аргументом нашей функции RegExpExtract, задающим порядковый номер извлекаемого элемента. И, само-собой, можно заменить функцией ПОДСТАВИТЬ (SUBSTITUTE) в результатах дефис на стандартный десятичный разделитель и добавить двойной минус в начале, чтобы Excel интерпретировал найденный НДС как нормальное число:

Извлекаем суммы и НДС из текста

Автомобильные номера

Если не брать спецтранспорт, прицепы и прочие мотоциклы, то стандартный российский автомобильный номер разбирается по принципу «буква — три цифры — две буквы — код региона». Причем код региона может быть 2- или 3-значным, а в качестве букв применяются только те, что похожи внешне на латиницу. Таким образом, для извлечения номеров из текста нам поможет следующая регулярка:

Извлекаем автомобильный номер из текста

Время

Для извлечения времени в формате ЧЧ:ММ подойдет такое регулярное выражение:

Извлекаем время из текста

После двоеточия фрагмент [0-5]d, как легко сообразить, задает любое число в интервале 00-59. Перед двоеточием в скобках работают два шаблона, разделенных логическим ИЛИ (вертикальной чертой):

  • [0-1]d — любое число в интервале 00-19
  • 2[0-3] — любое число в интервале 20-23

К полученному результату можно применить дополнительно еще и стандартную Excel’евскую функцию ВРЕМЯ (TIME), чтобы преобразовать его в понятный программе и пригодный для дальнейших расчетов формат времени.

Проверка пароля

Предположим, что нам надо проверить список придуманных пользователями паролей на корректность. По нашим правилам, в паролях могут быть только английские буквы (строчные или прописные) и цифры. Пробелы, подчеркивания и другие знаки препинания не допускаются.

Проверку можно организовать с помощью вот такой несложной регулярки:

Проверка пароля регулярным выражением

По сути, таким шаблоном мы требуем, чтобы между началом (^) и концом ($) в нашем тексте находились только символы из заданного в квадратных скобках набора. Если нужно проверить еще и длину пароля (например, не меньше 6 символов), то квантор + можно заменить на интервал «шесть и более» в виде {6,}:

Проверка длины пароля

Город из адреса

Допустим, нам нужно вытащить город из строки адреса. Поможет регулярка, извлекающая текст от «г.» до следующей запятой:

Извлечь город из адреса

Давайте разберем этот шаблон поподробнее.

Если вы прочитали текст выше, то уже поняли, что некоторые символы в регулярных выражениях (точки, звездочки, знаки доллара и т.д.) несут особый смысл. Если же нужно искать сами эти символы, то перед ними ставится обратная косая черта (иногда это называют экранированием). Поэтому при поиске фрагмента «г.» мы должны написать в регулярке г. если ищем плюсик, то + и т.д.

Следующих два символа в нашем шаблоне — точка и звездочка-квантор — обозначают любое количество любых символов, т.е. любое название города.

На конце шаблона стоит запятая, т.к. мы ищем текст от «г.» до запятой. Но ведь в тексте может быть несколько запятых, правда? Не только после города, но и после улицы, дома и т.д. На какой из них будет останавливаться наш запрос? Вот за это отвечает вопросительный знак. Без него наша регулярка вытаскивала бы максимально длинную строку из всех возможных:

Извлекаем город из адреса - жадный квантор

В терминах регулярных выражений, такой шаблон является «жадным». Чтобы исправить ситуацию и нужен вопросительный знак — он делает квантор, после которого стоит, «скупым» — и наш запрос берет текст только до первой встречной запятой после «г.»:

Скупой квантор

Имя файла из полного пути

Еще одна весьма распространенная ситуация — вытащить имя файла из полного пути. Тут поможет простая регулярка вида:

Извлечь имя файла из полного пути

Тут фишка в том, что поиск, по сути, происходит в обратном направлении — от конца к началу, т.к. в конце нашего шаблона стоит $, и мы ищем все, что перед ним до первого справа обратного слэша. Бэкслэш заэкранирован, как и точка в предыдущем примере.

P.S.

«Под занавес» хочу уточнить, что все вышеописанное — это малая часть из всех возможностей, которые предоставляют регулярные выражения. Спецсимволов и правил их использования очень много и на эту тему написаны целые книги (рекомендую для начала хотя бы эту). В некотором смысле, написание регулярных выражений — это почти искусство. Почти всегда придуманную регулярку можно улучшить или дополнить, сделав ее более изящной или способным работать с более широким диапазоном вариантов входных данных.

Для анализа и разбора чужих регулярок или отладки своих собственных есть несколько удобных онлайн-сервисов: RegEx101, RegExr и др.

К сожалению, не все возможности классических регулярных выражений поддерживаются в VBA (например, обратный поиск или POSIX-классы) и умеют работать с кириллицей, но и того, что есть, думаю, хватит на первое время, чтобы вас порадовать.

Если же вы не новичок в теме, и вам есть чем поделиться — оставляйте полезные при работе в Excel регулярки в комментариях ниже. Один ум хорошо, а два сапога — пара!

Ссылки по теме

  • Замена и зачистка текста функцией ПОДСТАВИТЬ (SUBSTITUTE)
  • Поиск и подсветка символов латиницы в русском тексте
  • Поиск ближайшего похожего текста (Иванов = Ивонов = Иваноф и т.д.)

Skip to content

RegEx в Excel: шпаргалка по синтаксису регулярных выражений

На первый взгляд, в Excel есть все, что вам может понадобиться для работы с текстовыми строками. Но очень часто случается, что мы не можем указать точно, что мы ищем. Мы знаем часть слова или шаблон, которые нам нужны.

А как насчет регулярных выражений, чтобы использовать шаблон текста? К сожалению, в Excel нет встроенных функций Regex.  Никак не могу понять, почему регулярные выражения не поддерживаются в формулах Excel? Теперь это есть:) освоив синтаксис регулярных выражений, с нашими пользовательскими функциями вы можете легко находить, заменять, извлекать и удалять слова, символы и строки, соответствующие определенному шаблону.

  • Что такое регулярное выражение?
  • Шпаргалка по регулярным выражениям Excel
  • Символы
  • Классы
  • Квантификаторы
  • Группы
  • Якоря
  • Конструкция ИЛИ
  • Поиск
  • «Жадные» и «ленивые» сопоставления

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

Регулярное выражение (также известное как RegExp) — это особым образом закодированная последовательность символов, определяющая шаблон поиска. 

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

Регулярные выражения имеют собственный синтаксис, состоящий из специальных символов, операторов и конструкций. Например, [0-5] соответствует любой одиночной цифре от 0 до 5.

Регулярные выражения используются во многих языках программирования, включая JavaScript и VBA. Последний имеет специальный объект RegExp, который мы будем использовать для создания наших пользовательских функций.

Поддерживает ли Excel регулярные выражения?

К сожалению, в Excel нет встроенных функций Regex. Чтобы иметь возможность использовать регулярные выражения в своих формулах, вам придется создать собственную пользовательскую функцию (на основе VBA или .NET) или установить сторонние инструменты, поддерживающие регулярные выражения.

Шпаргалка по регулярным выражениям Excel

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

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

Символы

Это наиболее часто используемые шаблоны для соответствия определенным символам.

Шаблон Описание Пример Найдено
. Подстановочный знак: соответствует любому одиночному символу, кроме разрыва строки. .от кот , лот , @от
d Символ цифры: любая одиночная цифра от 0 до 9 d В a1b найдено  1
D Любой символ, НЕ являющийся цифрой D В a1b найдено  a и b
s Пробельный символ: пробел, табуляция, новая строка и возврат каретки .s. В   3 яблока   найдено  3 я
S Любой непробельный символ. Анти-вариант предыдущего S+ В  30 яблок найдено  30 и яблок
w Символ слова: любая буква ASCII, цифра или подчеркивание. w+ В  5_яблок*** найдено  5_яблок
B+ Любой символ, который НЕ является буквенно-цифровым символом или символом подчеркивания В+ В  5_яблок*** найдено  ***
t Табуляция
n Новая строка nd+ В двухстрочной строке ниже соответствует 10 5 кошек
10 собак
Позволяет использовать специальный символ как обычный .

  w+.

Игнорирует подстановочный знак, чтобы вы могли найти буквальный символ «.» в строке

 Mr. , д-р. , проф.

Классы

Используя эти шаблоны, вы можете сопоставлять элементы разных наборов символов.

Шаблон Описание Пример Найдено
[символы] В квадратных скобках можно указать один или несколько символов, допустимых на указанной позиции в тексте. ст[оу]л стол   стул
[^символы] На указанной позиции в тексте будут разрешены все символы, кроме перечисленных в скобках.  [^жм]уть Соответствует путь, суть
Не соответствует жуть,  муть
[отдо] Соответствует любому символу [0-9]
[а-я]
[А-Я] [б-ф]   [а-яА-ЯёЁ]
Любая цифра от 0 до 9
Любая строчная буква
Любая прописная буква Любая из букв в скобках [бвгдежзиклмнопрстуф] Все буквы русского алфавита (буква Ë указывается отдельно!)

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

Квантификаторы — это специальные выражения, которые определяют количество совпадающих символов. Квантификатор всегда применяется к символу, стоящему перед ним перед ним.

Шаблон Описание Пример Найдено
* Ноль или более вхождений 1а* 1, 1а , 1аа, 1ааа и т. д.
+ Одно или более вхождений ко+ В кот найдено  ко
В кооперация найдено  коo
? Ноль или одно вхождение ко?т кот, корт
*? Ноль или более вхождений, но как можно меньше 1а*? В 1a , 1aa и 1aaa найдено  1a
+? Одно или несколько событий, но как можно меньше ко+? В кот и кооперация найдено  ко
{n} Строго определённое количество вхождений d{3} Ровно 3 любых цифры
{n,} Не менее n вхождений d{3,} 3 или более цифр
{,n} Не более n вхождений d{,3} Не более 3 цифр
{n, m} Соответствует предыдущему шаблону от n до m раз d{3,5} От 3 до 5 цифр

Группы

Конструкции групп используются для захвата подстроки из исходной строки, чтобы с ней можно было выполнить какую-либо операцию.

Синтаксис Описание Пример Найдено
(шаблон) Группа захвата: захватывает совпадающую подстроку и присваивает ей порядковый номер (d+) 5 кошек и 10 собак  5 (группа 1) и 10 (группа 2)
(?:шаблон) Группа без захвата: соответствует группе, но не захватывает ее (d+)(?:собак) 5 кошек и 10 собак  10
1 Содержимое группы 1 (d+)+(d+)=2+1 5+10=10+5
2 Содержимое группы 2

Якоря

Якоря указывают позицию во входной строке, где искать соответствие.

Якорь Описание Пример Найдено
^ Начало строки Примечание: [^в скобках] означает «не» ^d+ Любое количество цифр в начале строки. 5 кошек и 10 собак Найдено  5
$ Конец строки д+$ Любое количество цифр в конце строки. В 10 плюс 5 получается 15 , найдено  15
b Конец слова котb 1 кот и 10 котят  Соответствует кот, но не котят
В НЕ конец слова котB 1 кот и 10 котят  Соответствует котят, но не кот

Конструкция ИЛИ

Операнд чередования включает логику ИЛИ, поэтому вы можете сопоставить тот или иной элемент.

Построить Описание Пример Соответствие
| Соответствует любому отдельному элементу, разделенному вертикальной чертой (счет|invoice) Любое из перечисленных слов

Поиск

Конструкции поиска полезны, когда вы хотите найти что-то, за чем следует или не следует что-то другое. Эти выражения иногда называют «утверждениями нулевой ширины» или «совпадением нулевой ширины», потому что они соответствуют позиции, а не фактическим символам.

Примечание. В варианте VBA RegEx просмотр назад не поддерживается.

Шаблон Описание Пример Найдено
= знак равно Положительный вперед Х(?=Y) Соответствует выражению X, когда за ним следует Y (т. е. если Y предшествует X)
(?!) Отрицательный вперед Х(?!У) Соответствует выражению X, если за ним НЕ следует Y
(?<=) Положительный назад (?<=Y)Х Соответствует выражению X, когда ему предшествует Y (т. е. если Y находится позади X)
(?<!) Отрицательный назад (?<!Y)Х Соответствует выражению X, если ему НЕ предшествует Y

Жадные и ленивые сопоставления

Квантификаторы (* + {}) ― это «жадные» операторы, потому что они продолжают поиск соответствий, как можно глубже ― через весь текст.

Шаблон Описание Пример Найдено
<.+> Жадный поиск <.+> В выражении Это <div> простой div</div> тест возвращает <div> простой div</div>

Чтобы найти только тэг div ― можно использовать оператор ?, сделав выражение «ленивым»:

Шаблон Описание Пример Найдено
<.+?> Ленивый поиск <.+?> В выражении Это <div> простой div</div> тест возвращает 2 совпадения: <div>  </div>
<[^<>]+> Ленивый поиск <[^<>]+> В выражении Это <div> простой div</div> тест возвращает 2 совпадения: <div>  </div>

Обратите внимание, что хорошей практикой считается не использовать оператор . , в пользу более строгого выражения:  <[^<>]+>

<[^<>]+> соответствует любому символу, кроме скобок < или >,один или более раз встречающемуся между этими скобками.

Теперь, когда вы знаете синтаксис регулярных выражений, давайте перейдем к самой интересной части — использованию регулярных выражений на реальных данных для разбора строк и поиска необходимой информации. Если вам нужны дополнительные сведения о синтаксисе, может оказаться полезным руководство Microsoft по языку регулярных выражений .

  • Функции регулярных выражений в Excel
  • Примеры задач, решаемых с помощью регулярных выражений
  • Извлечение данных из ячеек с помощью RegEx
    • Извлечь из ячейки содержимое до / после первой цифры включительно
    • «Вытянуть» цифры из ячеек
    • Извлечь из ячейки числа из N цифр
    • Извлечь латиницу регулярным выражением
    • Извлечь символы в конце/начале строк по условию
  • Проверить ячейки на соответствие регулярному выражению
    • Найти в ячейке числа из N цифр
    • Найти ячейки, начинающиеся с цифр
  • Замена подстрок по регулярному выражению
    • Разбить ячейку по буквам
    • Разбить буквы и цифры в ячейке
    • Вставить текст после первого слова
    • Вставить символ после каждого слова или перед ним
  • Регулярные выражения для поиска конкретных слов в !SEMTools
    • Найти слова по регулярному выражению
    • Извлечь слова по регулярному выражению
  • Удалить слова по регулярному выражению
  • Очистить ячейки, не соответствующие регулярному выражению

Многие слышали, что такое регулярные выражения, но не всем известно, что они поддерживаются “под капотом” Microsoft Excel. Регулярные выражения дают возможность многократно ускорить работу с текстом, находить в нем самые замысловатые паттерны и решать самые сложные исследовательские задачи. Единственная проблема в том, что для их использования в Excel необходимо знание VBA.

Почему Microsoft не включила их как функции листа и включит ли когда-нибудь, непонятно и неизвестно.

Но с надстройкой !SEMTools эти знания не нужны. Зато минимальное понимание синтаксиса регулярок позволит с легкостью решать задачи, решение которых практически невозможно с помощью стандартных функций, либо для этого требуются формулы огромной длины. Примеры таких мегаформул можно посмотреть в решении задач:

  • найти английские буквы в Excel,
  • найти числа в тексте.

Для поддержки регулярных выражений при наличии подключенной надстройки !SEMTools в Excel будут работать три функции: REGEXMATCH, REGEXEXTRACT и REGEXREPLACE.

Их синтаксис и принцип работы аналогичен синтаксису Google Spreadsheets. Поэтому формулы, составленные в Excel, будут иметь полную зеркальную совместимость с Google Spreadsheets.

=REGEXMATCH("текст";"RegEx-паттерн для поиска")

REGEXMATCH возвращает ИСТИНА или ЛОЖЬ (TRUE или FALSE в английской версии Excel), в зависимости от того, соответствует текст паттерну или нет.

=REGEXEXTRACT("текст";"RegEx-паттерн для поиска")

REGEXEXTRACT извлекает первый попадающий под паттерн фрагмент текста. Небольшое отличие от Google Spreadsheets заключается в том, что, если в искомом тексте такого фрагмента нет, Spreadsheets отдают ошибку, а в надстройке отдается пустая строка.

=REGEXREPLACE("текст";"RegEx-паттерн для поиска";"текст, которым заменяем найденное")

Примеры задач, решаемых с помощью регулярных выражений

Я не поскуплюсь на примеры, чтобы показать вам все возможности регулярных выражений, так как они действительно огромны. Надеюсь, эта статья послужит руководством и стимулом активнее пользоваться их мощью. От простого к сложному.

Чтобы дать обычным пользователям Excel возможность максимально широко использовать возможности регулярных выражений, в надстройку !SEMTools был добавлен ряд быстрых процедур. Все примеры ниже будут показаны с их использованием.

Извлечение данных из ячеек с помощью RegEx

Извлечь из ячейки содержимое до / после первой цифры включительно

Такие простые два выражения. «+» — это служебный символ-квантификатор. Он обеспечивает «жадный» режим, при котором берутся все удовлетворяющие выражению символы до тех пор, пока на пути не встретится не удовлетворяющий ему или наступит конец/начало строки. Точка обозначает любой символ. Таким образом, берутся любые символы до конца строки, перед которыми есть цифра.

«d» обозначает «digits», иначе цифры. Поскольку квантификатора после “d” в примерах выше нет, то одну цифру. Если потребуется исключить из результатов эту цифру, это можно сделать позднее. В !SEMTools есть простые способы удалить символы в начале или конце ячейки.

Цифры можно выразить и другим регулярным выражением:

«Вытянуть» цифры из ячеек

Как извлечь из строки цифры? Регулярное выражение для такой операции будет безумно простым:

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

Если их нужно вывести не сплошной последовательностью, а через разделитель, сохранив фрагменты, где символы следуют друг за другом, выражение будет чуть иным, с «жадным» квантификатором. А при извлечении нужно будет использовать разделитель.

Это справедливо и для любых других символов, пример с числами ниже:

Извлечь числа через разделитель с помощью регулярного выражения

Извлечь из ячейки числа из N цифр

Как видно в примере выше, помимо чисел, обозначающих годы, были извлечены и другие числа, например, «1». Чтобы извлечь исключительно последовательности из четырех цифр, потребуется видоизменить выражение. Есть несколько вариантов:

Последние два варианта включают квантификатор фигурные скобки. Он указывает минимальное количество повторений удовлетворяющего паттерну символа или фрагмента строки. Паттерну, стоящему непосредственно перед квантификатором. В данном случае подряд должны идти любые четыре символа, являющиеся цифрами.

Извлекаем год с помощью регулярного выражения

Извлекаем все 4-цифровые последовательности (год) через разделитель

Извлечь латиницу регулярным выражением

Выражение [a-zA-Z] обозначает все символы латиницы. Дефис и в этом, и в предыдущем случае обозначает, что берутся все символы между a и z и между A и Z в общей таблице символов Unicode. Квадратные скобки — синоним “ИЛИ”. Рассматривается каждый из элементов или множеств внутри квадратных скобок, при этом выражение не находит ничего, только если сравниваемая строка не содержит ни одного элемента внутри квадратных скобок.

извлечь латиницу регулярным выражением

Извлекаем латиницу с помощью регулярных выражений

Извлечь символы в конце/начале строк по условию

Стандартные формулы ПРАВСИМВ и ЛЕВСИМВ позволяют извлечь из ячейки соответственно последние и первые N символов, но на этом их возможности заканчиваются.

С помощью же регулярных выражений можно извлечь:

  • Символы, идущие после и включая последнюю заглавную букву в ячейке, заканчивающейся на восклицательный знак. Так мы извлечем из ячеек все восклицательные предложения. Выражение для этого выглядит так: [А-Я][а-яa-z0-9 ]+!$.
  • Первые N выбранных символов из определенного множества, если ячейка с них начинается.
  • Аналогично: последние N определенных символов, если ячейка на них заканчивается.

Проверить ячейки на соответствие регулярному выражению

Если нет необходимости извлекать данные, а нужно лишь проверить, соответствуют ли они паттерну, чтобы потом отфильтровать их, удобнее использовать процедуру, эквивалентную формуле REGEXMATCH.

Найти в ячейке числа из N цифр

В зависимости от того, является N необходимым или достаточным условием, нужны разные регулярные выражения. Иными словами, считать ли последовательности из N+1, N+2 и т.д. цифр подходящими или нет. Если да, выражение будет таким же, как уже указывалось выше:

dddd
[0-9][0-9][0-9][0-9]
d{4}
[0-9]{4}

Если же нас интересуют строго последовательности из N цифр, задачу придется производить в две итерации:

  • В первую итерацию извлекать цифры вместе с границами строк или нецифровыми символами, идущими после/перед (это станет своеобразной проверкой отсутствия других цифр).
  • И во вторую уже сами цифры.

Выражения для первой итерации будут, соответственно:

(^|D)dddd($|D)
(^|D)[0-9][0-9][0-9][0-9]($|D)
(^|D)d{4}($|D)
(^|D)[0-9]{4}($|D)

Если внимательно посмотреть на отличие в синтаксисе, можно понять, что означают символы в нем:

  • вертикальная черта “|” обозначает “ИЛИ”,
  • скобки “( )” нужны для перечисления внутри них аргументов и “отгораживания” их от остального выражения,
  • каретка “^” обозначает начало строки,
  • символ доллара “$” — конец строки,
  • D — нечисловые символы. Обратите внимание: верхний регистр меняет значение d на противоположное. Это справедливо также для пар w и W, обозначающих латиницу и цифры и не-латиницу и цифры, и s и S, различные виды пробелов и не-пробельные символы соответственно.

Найти ячейки, начинающиеся с цифр

Выражение для подобной проверки будет:

Либо можно воспользоваться процедурой проверки на копии исходного диапазона без необходимости вводить формулу. Смотрите примеры.

Находим ячейки, начинающиеся с цифр, с помощью регулярного выражения

Замена подстрок по регулярному выражению

Наиболее частый кейс такой замены — замена на пустоту, когда наша задача попросту удалить из текста определенные символы. Наиболее популярны:

  • удаление цифр из текста,
  • удаление пунктуации,
  • всех символов, кроме букв и цифр.

Но бывают случаи, когда необходима реальная замена, например, когда нужно заменить буквы с “хвостиками”/умляутами/ударениями и прочими символами из европейских алфавитов на их английские аналоги. Задача популярна среди SEO-специалистов, формирующих урлы сайтов этих стран на основе оригинальной семантики. Так выглядит начало таблицы паттернов для замены диакритических символов на латиницу с помощью RegEx при генерации URL:

Диакритические символы и их английские эквиваленты

Разбить ячейку по буквам

Чтобы разбить ячейку посимвольно, достаточно извлечь все символы через разделитель. Выражением для извлечения будет обычная точка — она как раз и обозначает любой символ.

разбить текст на символы через разделитель

Разбить буквы и цифры в ячейке

Если строго соблюдать постановку этой задачи, ее выполнить довольно сложно. Но зато с помощью регулярных выражений можно отделить цифровые последовательности символов от нецифровых. Так будет выглядеть выражение:

А так будет выглядеть процесс на практике:

Разбить текст на цифровые и нецифровые символы

Разбиваем текст на цифры и нецифровые символы (буквы и знаки препинания) с помощью регулярного выражения

Вставить текст после первого слова

При замене по регулярному выражению в !SEMTools есть опция замены не всех, а только первого найденного фрагмента, удовлетворяющего паттерну. Это позволяет решить задачу вставки символов после первого слова. Просто заменим первый пробел на нужные нам символы с помощью соответствующей процедуры (эту задачу можно решить также с помощью функции ПОДСТАВИТЬ, но можно и воспользоваться функционалом замены по регулярному выражению). В отличие от обычной процедуры замены, здесь можно заменить только первое вхождение. В данном случае — первый пробел. Как видно, пробел ничем не отличается от обычного:

Заменяем первый пробел с помощью замены по регулярному выражению

Вставить символ после каждого слова или перед ним

Надстройка решает эту задачу в два клика готовой процедурой в меню “Изменить слова“, но можно воспользоваться и несложным выражением для замены:

Выражения обозначают, что заменяются пробелы или конец строки в первом случае и пробелы или начало строк во втором. Вертикальная черта — то самое “ИЛИ”.

А заменять будем, соответственно, на пробел с символом слева или справа. Процедура добавит лишний пробел перед ячейкой или после, поэтому от него желательно будет избавиться — удалить лишние пробелы или удалить символы в начале / конце ячейки.

Вставка символа после каждого слова с помощью регулярного выражения

Регулярные выражения для поиска конкретных слов в !SEMTools

Найти слова по регулярному выражению

Извлечь слова по регулярному выражению

Когда дело доходит до извлечения определенных слов, регулярные выражения становятся невероятно сложными. Поэтому надстройка !SEMTools упрощает задачу до применения паттернов RegEx на уровне слов как отдельных сущностей.

Вот так выглядит извлечение слов, содержащих латиницу и цифры, из массива слов, с помощью регулярного выражения:

Обратите внимание, что выражение означает, что цифра за буквой или буква за цифрой должны следовать непосредственно, без промежуточных символов между ними. Если нужно извлечь в том числе слова вида “asdf-13”, “1234-d”, понадобится обозначить возможность наличия символов между:

Удалить слова по регулярному выражению

Очистить ячейки, не соответствующие регулярному выражению

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

Примеры:

  • оставить ячейки с определенным количеством слов,
  • оставить ячейки с определенным количеством символов,
  • оставить ячейки, содержащие только цифры,
  • оставить ячейки, содержащие только буквы,
  • оставить ячейки, содержащие адрес электронной почты в доменной зоне .com и .ru.

Примеры использования “Извлечь ячейки по регулярному выражению”.

Содержание

  1. How to use regular expressions in Excel
  2. What is a regular expression?
  3. How to use regular expressions
  4. Code Samples
  5. A function that returns TRUE/FALSE if the pattern is found in a string
  6. A function that replaces the pattern with a given string
  7. Использование регулярных выражений в MS Excel
  8. RegEx in Excel: using regular expressions in formulas
  9. What is regular expression?
  10. Does Excel support regex?
  11. Excel Regex cheat sheet
  12. Characters
  13. Character classes
  14. Quantifiers
  15. Grouping
  16. Anchors
  17. Alternation (OR) construct
  18. Look-arounds
  19. Custom RegEx functions for Excel
  20. How VBA RegExp functions work
  21. VBA RegExp limitations
  22. Excel Regex Match function
  23. Example: how to use regular expressions to match strings
  24. Excel Regex Extract function
  25. Example: how to extract strings using regular expressions
  26. Excel Regex Replace function
  27. Example: how to replace or remove strings using regexes
  28. Regex Tools to match, extract, replace and remove substrings
  29. How to use Regex in Excel
  30. How to insert a Regex formula directly in a cell

How to use regular expressions in Excel

You can use text functions to manipulate text strings in Excel. However, you can’t use them with regular expressions. As of writing this article VBA is your only option. In this guide, we’re going to show you how to use regular expressions in Excel.

What is a regular expression?

A regular expression (also known as regex or regexp shortly) is a special text string for specifying a search pattern. They are like wildcards. Instead of specifying the number of characters, you can create patterns to find a specific group of characters, like searching between «b» to «o», using OR logic, excluding some characters, or repeating values.

Regular expressions are commonly used for text parsing and replacing operations for all programming languages. To use regular expressions in Excel, we will be using VBA.

Pattern Description Samples
^jack begins with «jack» jack-of-all-trades, jack’s house
jack$ ends with «jack» hijack
^jack$ is exactly «jack» jack
colo[u]<0,>r can include «u» at least 0 times colour, color (not colur)
col[o|u]r includes either «o» or «u» color, colur (not colour)
col[^u]r accepts any character except «u» color (not colur or colour)

How to use regular expressions

Let’s start using regular expressions in Excel by opening VBA. Press Alt + F11 keys to open VBA (Visual Basic for Applications) window. Add a module to enter your code.

Next step is to add regular expression reference to VBA. Click Tools > References in the VBA toolbar. Find and check Microsoft VBScript Regular Expressions 5.5 item in the References window. Click OK to add the reference.

Using the VBScript reference, we can create a regular expression object, which is defined as RegExp in VBA. A RegExp object has 4 properties and 3 methods:

Properties

Name Type Description
Global Boolean Set True to find all cases that match with the pattern.
Set False to find the first match.
IgnoreCase Boolean Set True to not make case-sensitive search.
Set False to make case-sensitive search.
Multiline Boolean Set True if your string has multiple lines and you want to perform the search in all lines.
Pattern String The regular expression pattern you want to search.

Methods

Name Arguments Description
Execute sourceString As String Returns an array that contains all occurrences of the pattern matched in the string.
Replace sourceString As String replaceVar As Variant Returns a string which all occurrences of the pattern in the string are replaced with the replaceVar string.
Test sourceString As String Returns True if there is a match. Otherwise, False.

Code Samples

A function that returns TRUE/FALSE if the pattern is found in a string

Public Function RegExFind(str As String, pat As String) As Boolean

‘Define the regular expression object

Dim RegEx As New RegExp

‘Set up regular expression properties

.Global = False ‘All occurences are not necessary since a single occurence is enough

.IgnoreCase = True ‘No case-sensitivty

.MultiLine = True ‘Check all lines

.Pattern = pat ‘pattern

After writing the code, you can use this function as a regular Excel function.

A function that replaces the pattern with a given string

Public Function RegExReplace(str As String, pat As String, replaceStr As String) As String

‘Define the regular expression object

Dim RegEx As New RegExp

‘Set up regular expression properties

.Global = False ‘All occurences are not necessary since a single occurence is enough

.IgnoreCase = True ‘No case-sensitivty

.MultiLine = True ‘Check all lines

.Pattern = pat ‘pattern

RegExReplace = RegEx.Replace(str, replaceStr) ‘Return the modified string with replacement value

The following sample shows how to replace strings that start with «col», continue with 0 or 1 occurrences of «o» and single «u», and finally ends with an «r» character with «Color» string.

Источник

Использование регулярных выражений в MS Excel

В своей работе мы часто сталкиваемся с тем, что нам нужно обработать ячейку с текстом или проверить, содержит ли ячейка определенные символы. Например, только кириллицу или дату в определённом формате (или электронную почту). В этом нам помогут регулярные выражения.

Прежде чем перейти к статье, опишу свой опыт использования регулярных выражений. Мне поступила задача из ячейки, содержащий, длинный текстовый комментарий (подробное описание операционного риска), вытащить номер счета, номер карты и Фамилию Имя Отчество, если они там есть. При помощи регулярных выражений, это задача решается очень просто. Проблема сводится к подбору правильной маски регулярного выражения.

Для использования регулярных выражений в своей работе первым делом необходимо подключить библиотеку Microsoft VBScript Regular Expressions 5.5

Приведем примеры трех полезных функций, которые необходимо записать себе в личную книгу макросов, для того чтобы их просто вызывать с листа.

Первая функция — это тестирование, т.е. проверка текста на соответствие определённой маске (маска может быть какой угодно, чтобы правильно составить маску нужно знать синтаксис регулярных выражений).

Вот как это работает:

Первый аргумент функции, это то, что мы проверяем. Второй аргумент – маска, которой должно соответствовать проверяемое выражение.

Например, uf_StrTest(C1;»[а-я]») проверит, содержит ли ячейка С1 хотя бы одну маленькую букву кириллицы, если содержит, то возвратит истину, иначе — возвратит ложь. Данную функцию можно использовать на запрет при вводе буквы латинского алфавита.

Вторая функция — это замена, т.е. извлечение из текста какой-то его части по определённому правилу.

Приведем пример как работает эта функция.

Допустим, у нас есть текст в ячейке С3 «Сидоров Петр Петрович». Нам нужно извлечь начальные буквы ФИО. Тогда наша функция будет выглядеть так

Жирным шрифтом выделены выражения в круглых скобках, их ровно три.

Именно они и будут в итоге являться заменой. Например, наша функция примет значение «СПП».

Недостаток этой функции в том, что мы должны знать маску всего текста, если мы этого не знаем, мы можем использовать третью функцию

Третья функция — это извлечение. Извлечение из текста его какой-то части по определённой маске.

Это требуется, если необходимо извлечь электронную почту или дату. Особенно, если в текстовой строке указано несколько электронных адресов.

Приведем пример как работает эта функция. Допустим, у нас есть текст в ячейке С3 «штрих-код: 30612-58746-16431-17562-35097-48735-17530-39512, дата регистрации: 23.10.2019, скан.образ:». Нам нужно извлечь дату. Тогда наша функция будет выглядеть так uf_Execute(С3;»d<2>.d<2>.d<4>»). Таким образом мы извлекаем из текса в ячейке СЗ, все что соответствует маске второго аргумента функции, если их несколько — функция выдаст их через точку с запятой.

Источник

RegEx in Excel: using regular expressions in formulas

by Svetlana Cheusheva, updated on March 9, 2023

Can never understand why regular expressions are not supported in Excel formulas? Now, they are 🙂 With our custom functions, you can easily find, replace, extract and remove strings matching a specific pattern.

At first sight, Excel has everything you could ever need for text string manipulations. Hmm… what about regular expressions? Oops, there are no built-in Regex functions in Excel. But no one says we cannot create our own ones 🙂

What is regular expression?

A (aka regex or regexp) is a specially encoded sequence of characters that defines a search pattern. Using that pattern, you can find a matching character combination in a string or validate data input. If you are familiar with a wildcard notation, you can think of regexes as an advanced version of wildcards.

Regular expressions have their own syntax consisting of special characters, operators, and constructs. For example, [0-5] matches any single digit from 0 to 5.

Regular expressions are used in many programming languages including JavaScript and VBA. The latter has a special RegExp object, which we’ll utilize to create our custom functions.

Does Excel support regex?

Regrettably, there are no inbuilt Regex functions in Excel. To be able to use regular expressions in your formulas, you’ll have to create your own user-defined function (VBA or .NET based) or install third-party tools supporting regexes.

Excel Regex cheat sheet

Whether a regex pattern is very simple or extremely sophisticated, it is built using the common syntax. This tutorial does not aim to teach you regular expressions. For this, there are plenty of resources online, from free tutorials for beginners to premium courses for advanced users.

Below we provide a quick reference to the main RegEx patterns that will help you get a grasp of the basics. It may also work as your cheat sheet when studying further examples.

If you are comfortable with regular expressions, you can jump straight to the RegExp functions.

Characters

These are the most frequently used patterns to match certain characters.

Pattern Description Example Matches
. Wildcard character: matches any single character except a line break .ot dot, hot, pot, @ot
d Digit character: any single digit from 0 to 9 d In a1b, matches 1
D Any character that is NOT a digit D In a1b, matches a and b
s Whitespace character: space, tab, new line and carriage return .s. In 3 cents, matches 3 c
S Any non-whitespace character S+ In 30 cents, matches 30 and cents
w Word character: any ASCII letter, digit or underscore w+ In 5_cats***, matches 5_cats
W Any character that is NOT an alphanumeric character or underscore W+ In 5_cats***, matches ***
t Tab
n New line nd+ In the two-line string below, matches 10

5 cats
10 dogs

Escapes special meaning of a character, so you can search for it .

w+.

Escapes a period so you can find the literal «.» character in a string

Mr., Mrs., Prof.

Character classes

Using these patterns, you can match elements of different character sets.

Pattern Description Example Matches
[characters] Matches any single character in the brackets d[oi]g dog and dig
[^characters] Matches any single character NOT in the brackets d[^oi]g Matches dag, dug, d1g
Does not match dog and dig
[from–to] Matches any character in the range between the brackets [0-9]
[a-z]
[A-Z]
Any single digit from 0 to 9
Any single lowercase letter
Any single uppercase letter

Quantifiers

Quantifiers are special expressions that specify the number of characters to match. A quantifier always applies to the character before it.

Pattern Description Example Matches
* Zero or more occurrences 1a* 1, 1a, 1aa, 1aaa, etc.
+ One or more occurrences po+ In pot, matches po
In poor, matches poo
? Zero or one occurrence roa?d road, rod
*? Zero or more occurrences, but as fewer as possible 1a*? In 1a, 1aa and 1aaa, matches 1a
+? One or more occurrences, but as fewer as possible po+? In pot and poor, matches po
?? Zero or one occurrence, but as fewer as possible roa?? In road and rod, matches ro
Matches the preceding pattern n times d Exactly 3 digits
Matches the preceding pattern n or more times d 3 or more digits
Matches the preceding pattern between n and m times d From 3 to 5 digits

Grouping

Grouping constructs are used to capture a substring from the source string, so you can perform some operation with it.

Syntax Description Example Matches
(pattern) Capturing group: captures a matching substring and assigns it an ordinal number (d+) In 5 cats and 10 dogs, captures 5 (group 1) and 10 (group 2)
(?:pattern) Non-capturing group: matches a group but does not capture it (d+)(?: dogs) In 5 cats and 10 dogs, captures 10
1 Contents of group 1 (d+)+(d+)=2+1 Matches 5+10=10+5 and captures 5 and 10, which are in capturing groups
2 Contents of group 2

Anchors

Anchors specify a position in the input string where to look for a match.

Anchor Description Example Matches
^ Start of string

Note: [^inside brackets] means «not»

^d+ Any number of digits at the start of the string.

In 5 cats and 10 dogs, matches 5

$ End of string d+$ Any number of digits at the end of the string.

In 10 plus 5 gives 15, matches 15

b Word boundary bjoyb Matches joy as a separate word, but not in enjoyable.
B NOT a word boundary BjoyB Matches joy in enjoyable, but not as a separate word.

Alternation (OR) construct

The alternation operand enables the OR logic, so you can match either this or that element.

Construct Description Example Matches
| Matches any single element separated by the vertical bar (s|sh)ells In she sells sea-shells, matches sells and shells

Look-arounds

Lookaround constructs are helpful when you want to match something that is or isn’t followed or preceded by something else. These expressions are sometimes called «zero-width assertions» or «zero-width match» because they match a position rather than actual characters.

Note. In VBA RegEx flavor, lookbehinds are not supported.

Pattern Description Example Matches
(?=) Positive lookahead X(?=Y) Matches expression X when it is followed by Y (i.e. if there is Y ahead of X)
(?!) Negative lookahead X(?!Y) Matches expression X if it is NOT followed by Y
(?

Custom RegEx functions for Excel

As already mentioned, Microsoft Excel has no built-in RegEx functions. To enable regular expressions, we’ve created three custom VBA functions (aka user-defined functions). You can copy the codes from the below-linked pages or from our sample workbook, and then paste in your own Excel files.

How VBA RegExp functions work

This section explains the inner mechanics and may be interesting to those who want to know exactly what happens at the backend.

To start using regular expressions in VBA, you need to either activate the RegEx object reference library or use the CreateObject function. To save you the trouble of setting the reference in the VBA editor, we chose the latter approach.

The RegExp object has 4 properties:

  • Pattern — is the pattern to match in the input string.
  • Global — controls whether to find all matches in the input string or just the first one. In our functions, it is set to True to get all matches.
  • MultiLine — determines whether to match the pattern across line breaks in multi-line strings or only in the first line. In our codes, it is set to True to search in every line.
  • IgnoreCase — defines whether a regular expression is case-sensitive (default) or case-insensitive (set to True). In our case, that depends on how you configure the optional match_case parameter. By default, all the functions are case-sensitive.

VBA RegExp limitations

Excel VBA implements the essential regex patterns, but it does lack many advanced features available in .NET, Perl, Java, and other regex engines. For example, VBA RegExp does not support inline modifiers such as (?i) for case-insensitive matching or (?m) for multi-line mode, lookbehinds, POSIX classes, to name a few.

Excel Regex Match function

The RegExpMatch function searches an input string for text that matches a regular expression and returns TRUE if a match is found, FALSE otherwise.

  • Text (required) — one or more strings to search in.
  • Pattern (required) — the regular expression to match.
  • Match_case (optional) — match type. TRUE or omitted — case-sensitive; FALSE — case-insensitive

The function’s code is here.

Example: how to use regular expressions to match strings

In the below dataset, suppose you want to identify the entries containing SKU codes.

Given that each SKU starts with 2 capital letters, followed by a hyphen, followed by 4 digits, you can match them using the following expression.

Where [A-Z] <2>means any 2 uppercase letters from A to Z and d <4>means any 4 digits from 0 to 9. A word boundary b indicates that an SKU is a separate word and not part of a bigger string.

With the pattern established, start typing a formula like you normally do, and function’s name will appear in the list suggested by Excel’s AutoComplete:

Assuming the original string is in A5, the formula goes as follows:

For convenience, you can input the regular expression in a separate cell and use an absolute reference ($A$2) for the pattern argument. This ensures that the cell address will remain unchanged when you copy the formula to other cells:

To display your own text labels instead of TRUE and FALSE, nest RegExpMatch in the IF function and specify the desired texts in the value_if_true and value_if_false arguments:

=IF(RegExpMatch(A5, $A$2), «Yes», «No»)

For more formula examples, please see:

The RegExpExtract function searches for substrings that match a regular expression and extracts all matches or specific match.

  • Text (required) — the text string to search in.
  • Pattern (required) — the regular expression to match.
  • Instance_num (optional) — a serial number that indicates which instance to extract. If omitted, returns all found matches (default).
  • Match_case (optional) — defines whether to match (TRUE or omitted) or ignore (FALSE) text case.

You can get the code of the function here.

Taking our example a little further, let’s extract invoice numbers. For this, we’ll be using a very simple regex that matches any 7-digit number:

Put the pattern in A2 and you’ll get the job done with this compact and elegant formula:

If a pattern is matched, the formula extracts an invoice number, if no match is found — nothing is returned.

Excel Regex Replace function

The RegExpReplace function replaces the values matching a regex with the text you specify.

  • Text (required) — the text string to search in.
  • Pattern (required) — the regular expression to match.
  • Replacement (required) — the text to replace the matching substrings with.
  • Instance_num (optional) — the instance to replace. The default is «all matches».
  • Match_case (optional) — controls whether to match (TRUE or omitted) or ignore (FALSE) text case.

The code of the function is available here.

Example: how to replace or remove strings using regexes

Some of our records contain credit card numbers. This information is confidential, and you may want to replace it with something or delete altogether. Both tasks can be accomplished with the help of the RegExpReplace function. How? In a second scenario, we’ll be replacing with an empty string.

In our sample table, all card numbers have 16 digits, which are written in 4 groups separated with spaces. To find them, we replicate the pattern using this regular expression:

For replacement, the following string is used:

Replacement: XXXX XXXX XXXX XXXX

And here’s a complete formula to replace credit card numbers with insensitive information:

=RegExpReplace(A5, «bd <4>d <4>d <4>d<4>b», «XXXX XXXX XXXX XXXX»)

With the regex and replacement text in separate cells (A2 and B2), the formula works equally well:

In Excel, «removing» is a particular case of «replacing». To remove credit card numbers, just use an empty string («») for the replacement argument:

=RegExpReplace(A5, «bd <4>d <4>d <4>d<4>b», «»)

Tip. To get rig of empty lines in the results, you can use another RegExpReplace function as shown in this example: How to remove blank lines using regex.

For more information, please see:

The users of our Ultimate Suite can get all the power of regular expressions without inserting a single line of code in their workbooks. All necessary code is written by our developers and smoothy integrated in your Excel during installation.

Unlike the VBA functions discussed above, Ultimate Suite’s functions are .NET based, which gives two main advantages:

  1. You can use regular expressions in normal .xlsx workbooks without adding any VBA code and having to save them as macro-enabled files.
  2. .NET Regex engine supports full-featured classic regular expressions, which lets you construct more sophisticated patterns.

How to use Regex in Excel

With the Ultimate Suite installed, using regular expressions in Excel is as simple as these two steps:

    On the Ablebits Data tab, in the Text group, click Regex Tools.
  • On the Regex Tools pane, do the following:
    • Select the source data.
    • Enter your regex pattern.
    • Choose the desired option: Match, Extract, Remove or Replace.
    • To get the result as formula and not value, select the Insert as a formula check box.
    • Hit the action button.

    For instance, to remove credit card numbers from cells A2:A6, we configure these settings:

    In a trice, an AblebitsRegex function will be inserted in a new column to the right of your original data. In our case, the formula is:

    =AblebitsRegexRemove(A2, «bd <4>d <4>d <4>d<4>b»)

    Once the formula is there, you can edit, copy or move it like any native formula.

    How to insert a Regex formula directly in a cell

    The AblebitsRegex functions can also be inserted directly in a cell without using the add-in’s interface. Here’s how:

    1. Click the fx button on the formula bar or Insert Function on the Formulas tab.
    2. In the Insert Function dialog box, select the AblebitsUDFs category, choose the function of interest, and click OK.
  • Define the function’s arguments like you normally do and click OK. Done!
  • For more information, please see Regex Tools for Excel.

    That’s how to use regular expressions to match, extract, replace and remove text in Excel cells. I thank you for reading and look forward to seeing you on our blog next week!

    Источник

    You can use text functions to manipulate text strings in Excel. However, you can’t use them with regular expressions. As of writing this article VBA is your only option. In this guide, we’re going to show you how to use regular expressions in Excel.

    Download Workbook

    What is a regular expression?

    A regular expression (also known as regex or regexp shortly) is a special text string for specifying a search pattern. They are like wildcards. Instead of specifying the number of characters, you can create patterns to find a specific group of characters, like searching between «b» to «o», using OR logic, excluding some characters, or repeating values.

    Regular expressions are commonly used for text parsing and replacing operations for all programming languages. To use regular expressions in Excel, we will be using VBA.

    Pattern Description Samples
    ^jack begins with «jack» jack-of-all-trades, jack’s house
    jack$ ends with «jack» hijack
    ^jack$ is exactly «jack» jack
    colo[u]{0,}r can include «u» at least 0 times colour, color (not colur)
    col[o|u]r includes either «o» or «u» color, colur (not colour)
    col[^u]r accepts any character except «u» color (not colur or colour)

    How to use regular expressions

    Let’s start using regular expressions in Excel by opening VBA. Press Alt + F11 keys to open VBA (Visual Basic for Applications) window. Add a module to enter your code.

    Next step is to add regular expression reference to VBA. Click Tools > References in the VBA toolbar. Find and check Microsoft VBScript Regular Expressions 5.5 item in the References window. Click OK to add the reference.

    How to use regular expressions in Excel 02

    Using the VBScript reference, we can create a regular expression object, which is defined as RegExp in VBA. A RegExp object has 4 properties and 3 methods:

    Properties

    Name Type Description
    Global Boolean Set True to find all cases that match with the pattern.
    Set False to find the first match.
    IgnoreCase Boolean Set True to not make case-sensitive search.
    Set False to make case-sensitive search.
    Multiline Boolean Set True if your string has multiple lines and you want to perform the search in all lines.
    Pattern String The regular expression pattern you want to search.

    Methods

    Name Arguments Description
    Execute sourceString As String Returns an array that contains all occurrences of the pattern matched in the string.
    Replace sourceString As String replaceVar As Variant Returns a string which all occurrences of the pattern in the string are replaced with the replaceVar string.
    Test sourceString As String Returns True if there is a match. Otherwise, False.

    Code Samples

    A function that returns TRUE/FALSE if the pattern is found in a string

    Public Function RegExFind(str As String, pat As String) As Boolean

    ‘Define the regular expression object

    Dim RegEx As New RegExp

    ‘Set up regular expression properties

    With RegEx

    .Global = False ‘All occurences are not necessary since a single occurence is enough

    .IgnoreCase = True ‘No case-sensitivty

    .MultiLine = True ‘Check all lines

    .Pattern = pat ‘pattern

    End With

    RegExFind = RegEx.Test(str)

    End Function

    How to use regular expressions in Excel 04

    After writing the code, you can use this function as a regular Excel function.

    A function that replaces the pattern with a given string

    Public Function RegExReplace(str As String, pat As String, replaceStr As String) As String

    ‘Define the regular expression object

    Dim RegEx As New RegExp

    ‘Set up regular expression properties

    With RegEx

    .Global = False ‘All occurences are not necessary since a single occurence is enough

    .IgnoreCase = True ‘No case-sensitivty

    .MultiLine = True ‘Check all lines

    .Pattern = pat ‘pattern

    End With

    RegExReplace = RegEx.Replace(str, replaceStr) ‘Return the modified string with replacement value

    End Function

    How to use regular expressions in Excel 06

    The following sample shows how to replace strings that start with «col», continue with 0 or 1 occurrences of «o» and single «u», and finally ends with an «r» character with «Color» string.

    Понравилась статья? Поделить с друзьями:
  • Regular expressions find word
  • Regular expressions exclude word
  • Regular expressions any word
  • Regular expression word characters
  • Regular expression to match a word