Оглавление
Никогда не могли понять, почему регулярные выражения не поддерживаются в формулах Excel? Теперь они поддерживаются :) С помощью наших пользовательских функций вы можете легко находить, заменять, извлекать и удалять строки, соответствующие определенному шаблону.
На первый взгляд, в Excel есть все, что нужно для работы с текстовыми строками. Хм... а как насчет регулярных выражений? Упс, встроенных функций Regex в Excel нет. Но никто не говорит, что мы не можем создать свои собственные :)
Что такое регулярное выражение?
Регулярное выражение (оно же regex или regexp ) - это специально закодированная последовательность символов, определяющая шаблон поиска. Используя этот шаблон, вы можете найти соответствующую комбинацию символов в строке или проверить вводимые данные. Если вы знакомы с нотацией подстановочных знаков, вы можете считать регексы расширенной версией подстановочных знаков.
Регулярные выражения имеют свой собственный синтаксис, состоящий из специальных символов, операторов и конструкций. Например, [0-5] соответствует любой цифре от 0 до 5.
Регулярные выражения используются во многих языках программирования, включая JavaScript и VBA. В последнем есть специальный объект RegExp, который мы будем использовать для создания наших пользовательских функций.
Поддерживает ли Excel regex?
К сожалению, в Excel нет встроенных функций Regex. Чтобы иметь возможность использовать регулярные выражения в формулах, вам придется создать собственную пользовательскую функцию (на базе VBA или .NET) или установить сторонние инструменты, поддерживающие регексы.
Шпаргалка по регексам Excel
Независимо от того, является ли шаблон regex очень простым или чрезвычайно сложным, он строится с использованием общего синтаксиса. Данный учебник не ставит своей целью научить вас регулярным выражениям. Для этого существует множество ресурсов в Интернете, от бесплатных учебников для начинающих до премиум-курсов для опытных пользователей.
Ниже мы приводим краткий справочник по основным паттернам RegEx, который поможет вам разобраться в основах. Он также может послужить вам шпаргалкой при изучении дальнейших примеров.
Если вам удобно работать с регулярными выражениями, вы можете сразу перейти к функциям RegExp.
Персонажи
Это наиболее часто используемые шаблоны для сопоставления определенных символов.
Узор | Описание | Пример | Спички |
. | Символ подстановки: соответствует любому отдельному символу, кроме перевода строки | .ot | точка , горячий , горшок , @ot |
\d | Цифровой символ: любая одиночная цифра от 0 до 9 | \d | В a1b , спички 1 |
\D | Любой символ, который НЕ является цифрой | \D | В a1b , спички a и b |
\s | Символ пробела: пробел, табуляция, новая строка и возврат каретки | .\s. | В 3 цента , спички 3 c |
\S | Любой символ, не являющийся пробелом | \S+ | В 30 центов , спички 30 и центов |
\w | Символ слова: любая буква ASCII, цифра или знак подчеркивания | \w+ | В 5_кошек*** , спички 5_кошек |
\W | Любой символ, который НЕ является буквенно-цифровым символом или символом подчеркивания | \W+ | В 5_кошек*** , спички *** |
\t | Вкладка | ||
\n | Новая линия | \n\d+ | В двухстрочной строке, приведенной ниже, совпадения 10 5 кошек 10 собак |
\ | Выводит специальное значение символа, чтобы его можно было искать | \. \w+\. | Выводит точку, чтобы можно было найти литеральный символ "." в строке Господин. , Миссис. , Проф. |
Классы персонажей
Используя эти шаблоны, вы можете сопоставлять элементы из разных наборов символов.
Узор | Описание | Пример | Спички |
[персонажи]. | Идентифицирует любой отдельный символ в скобках | d[oi]g | собака и копать |
[^символы] | Совпадает с любым символом, который НЕ находится в скобках | d[^oi]g | Спички даг, даг , d1g Не соответствует собака и копать |
[от до] | Сопоставляет любой символ в диапазоне между скобками | [0-9] [a-z] [A-Z] | Любая цифра от 0 до 9 Любая одиночная строчная буква Любая отдельная заглавная буква |
Квантификаторы
Квантификаторы - это специальные выражения, которые указывают количество символов для сопоставления. Квантификатор всегда применяется к символу перед ним.
Узор | Описание | Пример | Спички |
* | Ноль или более случаев | 1a* | 1, 1a , 1aa, 1aaa , и т.д. |
+ | Один или несколько случаев | по+ | В горшок , спички по В бедный , спички какашки |
? | Ноль или одно появление | роада | дорога, стержень |
*? | Ноль или более случаев, но как можно меньше | 1a*? | В 1a , 1aa и 1aaa , спички 1a |
+? | Один или несколько случаев, но как можно меньше | по+? | В горшок и бедный , спички по |
?? | Ноль или одно появление, но как можно меньше | роа??? | В дорога и стержень , спички ro |
{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) |
(?:pattern) | Не захватывающая группа: соответствует группе, но не захватывает ее | (\d+)(?: собаки) | В 5 кошек и 10 собак , захваты 10 |
\1 | Содержание группы 1 | (\d+)\+(\d+)=\2\+\1 | Совпадения 5+10=10+5 и захватывает 5 и 10 которые находятся в группах захвата |
\2 | Содержание группы 2 |
Якоря
Якоря задают позицию во входной строке, в которой следует искать совпадение.
Якорь | Описание | Пример | Спички |
^ | Начало строки Примечание: [^внутренние скобки] означает "не". | ^\d+ | Любое количество цифр в начале строки. В 5 кошек и 10 собак , спички 5 |
$ | Конец строки | \d+$ | Любое количество цифр в конце строки. В 10 плюс 5 дает 15 , спички 15 |
\b | Граница слова | \bjoy\b | Спички радость как отдельное слово, но не в приятный . |
\B | НЕ слово граница | \Bjoy\B | Спички радость в приятный но не как отдельное слово. |
Конструкция чередования (OR)
Операнд чередования включает логику ИЛИ, поэтому вы можете сопоставить либо тот, либо другой элемент.
Построить | Описание | Пример | Спички |
Совпадает с любым отдельным элементом, разделенным вертикальной полосой | (s | В она продает морские раковины, соответствует продает и раковины |
Обходные пути
Конструкции lookaround полезны, когда вы хотите сопоставить что-то, за чем следует или не следует или чему предшествует что-то другое. Эти выражения иногда называют "утверждениями нулевой ширины" или "сопоставлением нулевой ширины", потому что они сопоставляют позицию, а не фактические символы.
Примечание. В формате VBA RegEx lookbehinds не поддерживаются.
Узор | Описание | Пример | Спички |
(?=) | Положительный прогноз | X(?=Y) | Совпадает с выражением X, если за ним следует Y (т.е. если Y стоит впереди X) |
(?!) | Отрицательный прогноз | X(?!Y) | Совпадает с выражением X, если за ним НЕ следует Y |
(?<=) | Позитивный взгляд со стороны | (?<=Y)X | Совпадает с выражением X, если ему предшествует Y (т.е. если за X стоит Y) |
(? )</td | Негативный взгляд со стороны | (? Y)X</td | Совпадает с выражением X, если ему НЕ предшествует Y |
Теперь, когда вы знаете основные моменты, давайте перейдем к самому интересному - использованию регексов на реальных данных для анализа строк и поиска необходимой информации. Если вам нужны более подробные сведения о синтаксисе, вам может оказаться полезным руководство Microsoft по языку регулярных выражений.
Пользовательские функции RegEx для Excel
Как уже упоминалось, в Microsoft Excel нет встроенных функций RegEx. Чтобы включить регулярные выражения, мы создали три пользовательские функции VBA (они же определяемые пользователем функции). Вы можете скопировать коды со страниц, на которые даны ссылки ниже, или из нашего примера рабочей книги, а затем вставить в свои собственные файлы Excel.
Как работают функции VBA RegExp
Этот раздел объясняет внутреннюю механику и может быть интересен тем, кто хочет точно знать, что происходит на задней стороне.
Чтобы начать использовать регулярные выражения в VBA, необходимо либо активировать библиотеку ссылок на объекты RegEx, либо использовать функцию CreateObject. Чтобы избавить вас от необходимости устанавливать ссылку в редакторе VBA, мы выбрали последний подход.
Объект RegExp имеет 4 свойства:
- Узор - это шаблон для поиска во входной строке.
- Глобальный - определяет, следует ли искать все совпадения во входной строке или только первое. В наших функциях он установлен в True, чтобы получить все матчи .
- MultiLine - определяет, следует ли искать шаблон через разрывы строк в многострочных строках или только в первой строке. В наших кодах он установлен в True для поиска в каждой строчке .
- IgnoreCase - определяет, является ли регулярное выражение чувствительным к регистру (по умолчанию) или нечувствительным к регистру (установлено значение True). В нашем случае это зависит от того, как вы настроите дополнительный параметр соответствие_случаю По умолчанию все функции с учетом регистра .
Ограничения VBA RegExp
Excel VBA реализует основные шаблоны regex, но ему не хватает многих расширенных возможностей, доступных в .NET, Perl, Java и других механизмах regex. Например, VBA RegExp не поддерживает встроенные модификаторы, такие как (?i) для соответствия без учета регистра или (?m) для многострочного режима, lookbehinds, POSIX-классы и т.д..
Функция совпадения регексов в Excel
Сайт RegExpMatch Функция ищет во входной строке текст, соответствующий регулярному выражению, и возвращает TRUE, если совпадение найдено, FALSE в противном случае.
RegExpMatch(text, pattern, [match_case])Где:
- Текст (требуется) - одна или несколько строк для поиска.
- Узор (требуется) - регулярное выражение для сопоставления.
- Соответствие_случаю (необязательно) - тип соответствия. TRUE или опущено - чувствительный к регистру; FALSE - нечувствительный к регистру.
Код функции находится здесь.
Пример: как использовать регулярные выражения для сопоставления строк
Предположим, что в приведенном ниже наборе данных необходимо определить записи, содержащие коды SKU.
Учитывая, что каждый SKU начинается с 2 заглавных букв, за которыми следует дефис, а затем 4 цифры, вы можете сопоставить их с помощью следующего выражения.
Узор : \b[A-Z]{2}-\d{4}\b
Где [A-Z]{2} означает любые 2 заглавные буквы от A до Z, а \d{4} означает любые 4 цифры от 0 до 9. Граница слова \b означает, что SKU является отдельным словом, а не частью более крупной строки.
Установив шаблон, начните вводить формулу, как вы это обычно делаете, и имя функции появится в списке, предложенном функцией автозаполнения Excel:
Если предположить, что исходная строка находится в A5, то формула будет выглядеть следующим образом:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Для удобства вы можете ввести регулярное выражение в отдельную ячейку и использовать абсолютную ссылку ($A$2) для шаблон аргумент. Это гарантирует, что адрес ячейки останется неизменным при копировании формулы в другие ячейки:
=RegExpMatch(A5, $A$2)
Чтобы вывести собственные текстовые метки вместо TRUE и FALSE, вложите RegExpMatch в функцию IF и укажите нужные тексты в поле значение_если_истина и значение_если_ложно аргументы:
=IF(RegExpMatch(A5, $A$2), "Да", "Нет")
Примеры формул см:
- Как сопоставить строки с помощью регулярных выражений
- Валидация данных Excel с помощью регексов
Функция извлечения регекса Excel
Сайт RegExpExtract функция ищет подстроки, соответствующие регулярному выражению, и извлекает все совпадения или конкретное совпадение.
RegExpExtract(text, pattern, [instance_num], [match_case])Где:
- Текст (требуется) - текстовая строка для поиска.
- Узор (требуется) - регулярное выражение для сопоставления.
- Номер_экземпляра (необязательно) - порядковый номер, указывающий, какой экземпляр извлекать. Если он опущен, возвращаются все найденные совпадения (по умолчанию).
- Соответствие_случаю (необязательный) - определяет, следует ли согласовывать (TRUE или опущено) или игнорировать (FALSE) регистр текста.
Код функции можно получить здесь.
Пример: как извлекать строки с помощью регулярных выражений
Для этого мы будем использовать очень простой регекс, который соответствует любому 7-значному числу:
Узор : \b\d{7}\b
Нанесите узор в формате A2, и вы справитесь с этой компактной и элегантной формулой:
=RegExpExtract(A5, $A$2)
Если шаблон совпадает, формула извлекает номер счета, если совпадений не найдено - ничего не возвращается.
Дополнительные примеры см. в разделе: Как извлечь строки в Excel с помощью regex.
Excel Regex Replace function
Сайт RegExpReplace функция заменяет значения, соответствующие regex, на указанный вами текст.
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Где:
- Текст (требуется) - текстовая строка для поиска.
- Узор (требуется) - регулярное выражение для сопоставления.
- Замена (требуется) - текст, на который следует заменить совпадающие подстроки.
- Номер_экземпляра (необязательно) - экземпляр для замены. По умолчанию - "все совпадения".
- Соответствие_случаю (необязательный) - управляет тем, следует ли согласовывать (TRUE или опущено) или игнорировать (FALSE) регистр текста.
Код функции доступен здесь.
Пример: как заменить или удалить строки с помощью регексов
Некоторые наши записи содержат номера кредитных карт. Эта информация является конфиденциальной, и вы можете захотеть заменить ее чем-нибудь или удалить совсем. Обе задачи можно решить с помощью программы RegExpReplace Как? Во втором сценарии мы будем заменять пустой строкой.
В нашей таблице-образце все номера карт состоят из 16 цифр, которые записаны в 4 группах, разделенных пробелами. Чтобы найти их, мы воспроизведем шаблон с помощью этого регулярного выражения:
Узор : \b\d{4} \d{4} \d{4} \d{4} \d{4}\b
Для замены используется следующая строка:
Замена : XXXX XXXX XXXX XXXX XXXX XXXX
А вот полная формула для заменить номера кредитных карт с нечувствительной информацией:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")
При использовании regex и заменяющего текста в отдельных ячейках (A2 и B2) формула работает одинаково хорошо:
В Excel "удаление" является частным случаем "замены". To удалить номера кредитных карт, просто используйте пустую строку ("") для замена аргумент:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "")
Совет. Чтобы избавиться от пустых строк в результатах, вы можете использовать другую функцию RegExpReplace, как показано в этом примере: Как удалить пустые строки с помощью regex.
Для получения дополнительной информации см:
- Как заменить строки в Excel с помощью regex
- Как удалить строки с помощью regex
- Как удалить пробельные символы с помощью регексов
Инструменты Regex для сопоставления, извлечения, замены и удаления подстрок
Пользователи нашего пакета Ultimate Suite могут получить всю мощь регулярных выражений, не вставляя ни одной строки кода в свои рабочие книги. Весь необходимый код написан нашими разработчиками и плавно интегрирован в ваш Excel во время установки.
В отличие от функций VBA, рассмотренных выше, функции Ultimate Suite основаны на .NET, что дает два основных преимущества:
- Вы можете использовать регулярные выражения в обычных рабочих книгах .xlsx без добавления кода VBA и необходимости сохранять их как файлы с поддержкой макросов.
- Механизм .NET Regex поддерживает полнофункциональные классические регулярные выражения, что позволяет строить более сложные шаблоны.
Как использовать Regex в Excel
С установленным пакетом Ultimate Suite использование регулярных выражений в Excel упрощается до двух шагов:
- На Ablebits Data во вкладке Текст группу, нажмите Инструменты регекса .
- На Инструменты регекса панели, выполните следующие действия:
- Выберите исходные данные.
- Введите свой шаблон regex.
- Выберите нужную опцию: Матч , Выписка , Удалить или Заменить .
- Чтобы получить результат в виде формулы, а не значения, выберите параметр Вставка в виде формулы флажок.
- Нажмите кнопку действия.
Например, чтобы удалить номера кредитных карт из ячеек A2:A6, мы настроим следующие параметры:
В мгновение ока функция AblebitsRegex будет вставлена в новый столбец справа от ваших исходных данных. В нашем случае формула имеет вид:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")
Как только формула создана, вы можете редактировать, копировать или перемещать ее, как любую другую формулу.
Как вставить формулу Regex непосредственно в ячейку
Функции AblebitsRegex также можно вставить непосредственно в ячейку без использования интерфейса надстройки. Вот как это сделать:
- Нажмите кнопку fx на панели формул или Функция вставки на Формулы вкладка.
- В Функция вставки В диалоговом окне выберите AblebitsUDFs категорию, выберите интересующую функцию и нажмите OK.
- Определите аргументы функции, как вы обычно это делаете, и нажмите OK. Готово!
Для получения дополнительной информации см. раздел Инструменты Regex для Excel.
Вот как использовать регулярные выражения для сопоставления, извлечения, замены и удаления текста в ячейках Excel. Я благодарю вас за чтение и жду вас на нашем блоге на следующей неделе!
Доступные загрузки
Excel Regex - примеры формул (файл .xlsm)
Ultimate Suite - пробная версия (файл .exe)