Приклади Excel RegEx: використання регулярних виразів у формулах

  • Поділитися Цим
Michael Brown

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

На перший погляд, в Excel є все, що може знадобитися для маніпуляцій з текстовими рядками. Хм... а як же регулярні вирази? Ой, в Excel немає вбудованих Regex-функцій. Але ніхто не забороняє створювати свої власні :)

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

    Регулярний вираз (він же 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_cats
    \W Будь-який символ, який НЕ є буквено-цифровим символом або символом підкреслення \W+ В 5_котів*** сірники ***
    \t Вкладка
    \n Нова лінія \Я знаю, що це не так. У наведеному нижче дворядковому рядку співпадає 10

    5 котів

    10 собак

    \ Втікає особливе значення символу, щоб можна було його шукати \.

    \w+\.

    Екранує крапку, щоб можна було знайти в рядку буквальний символ "."

    Пане. , Пані. , Проф.

    Класи символів

    За допомогою цих шаблонів можна зіставляти елементи різних наборів символів.

    Візерунок Опис Приклад Сірники
    [символи] Збігається з будь-яким символом у дужках d[oi]g собака і копати
    [^символи] Збігається з будь-яким символом НЕ в дужках d[^oi]g Сірники даг, даг, даг , d1g

    Не відповідає собака і копати

    [від до] Відповідає будь-якому символу в діапазоні між дужками [0-9]

    [a-z]

    [A-Z]

    Будь-яка одна цифра від 0 до 9

    Будь-яка одна мала літера

    Будь-яка одна велика літера

    Кількісні показники

    Квантори - це спеціальні вирази, які визначають кількість символів, що підлягають зіставленню. Квантор завжди застосовується до символу, що стоїть перед ним.

    Візерунок Опис Приклад Сірники
    * Нуль або більше випадків 1a* 1, 1a , 1аа, 1ааа і т.д.
    + Один або більше випадків po+ В горшок сірники по

    В бідний сірники какашки

    ? Нуль або один випадок роад дорога, штанга
    *? Нуль або більше випадків, але якомога менше 1a*? В 1a , 1aa і 1ааа сірники 1a
    +? Один або декілька випадків, але якомога менше По+? В горшок і бідний сірники по
    ?? Нуль або один випадок, але якомога менше Роа? В дорога і стрижень сірники ро
    {n} Збігається з попереднім шаблоном n разів \d{3} Рівно 3 цифри
    {n,} Збігається з попереднім шаблоном n або більше разів \d{3,} 3 або більше цифр
    {Я знаю, що ти не хочеш, щоб я був тут.} Збігається з попереднім шаблоном від 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 Межа слова \радість Сірники радість як окреме слово, але не в приємний .
    \B НЕ межа слова \Насолоджуйся. Сірники радість в приємний але не як окреме слово.

    Альтернативна (АБО) конструкція

    Операнд чергування дозволяє використовувати логіку АБО, тому ви можете зіставити або той, або інший елемент.

    Конструювати Опис Приклад Сірники
    Відповідає будь-якому окремому елементу, розділеному вертикальною рискою (s В вона продає морські мушлі, сірники продає і снаряди

    Оглядини

    Конструкції обходу корисні, коли потрібно зіставити щось, що слідує або не слідує за чимось іншим або передує чомусь іншому. Ці вирази іноді називають "твердженнями нульової ширини" або "зіставленням нульової ширини", тому що вони зіставляють позицію, а не фактичні символи.

    Примітка: У VBA RegEx не підтримуються зворотні посилання.

    Візерунок Опис Приклад Сірники
    (?=) Позитивний прогноз X(?=Y) Відповідає виразу X, коли за ним слідує Y (тобто, якщо Y випереджає X)
    (?!) Негативний прогноз X(?!Y) Відповідає виразу X, якщо за ним НЕ слідує Y
    (?<=) Позитивний погляд у минуле (?<=Y)X Відповідає виразу X, якщо йому передує Y (тобто якщо Y стоїть за X)
    (? )</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). У нашому випадку це залежить від того, як ви налаштували опцію match_case За замовчуванням всі функції з урахуванням особливостей конкретного випадку .

    Обмеження VBA RegExp

    Excel VBA реалізує основні шаблони регексу, але йому не вистачає багатьох розширених функцій, доступних в .NET, Perl, Java та інших регексах. Наприклад, VBA RegExp не підтримує вбудовані модифікатори, такі як (?i) для нечутливого до регістру зіставлення або (?m) для багаторядкового режиму, зворотні посилання, POSIX-класи, якщо назвати декілька.

    Функція Excel Regex Match

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

    RegExpMatch(text, pattern, [match_case])

    Де:

    • Текст (обов'язково) - один або декілька рядків для пошуку.
    • Візерунок (обов'язково) - регулярний вираз для перевірки.
    • 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:

    Якщо припустити, що вихідний рядок знаходиться у форматі А5, то формула виглядає наступним чином:

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Для зручності можна ввести регулярний вираз в окрему комірку і використати абсолютне посилання ($A$2) для зразок Це гарантує, що адреса комірки залишиться незмінною при копіюванні формули в інші комірки:

    =RegExpMatch(A5, $A$2)

    Для виведення власних текстових міток замість TRUE і FALSE вкладіть RegExpMatch в функцію IF і вкажіть потрібні тексти в value_if_true і value_if_false аргументи:

    =IF(RegExpMatch(A5, $A$2), "Так", "Ні")

    Більше прикладів формул, будь ласка, дивіться:

    • Порівняння рядків з допомогою регулярних виразів
    • Перевірка даних Excel за допомогою регексів

    Функція Excel Regex Extract

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

    RegExpExtract(text, pattern, [instance_num], [match_case])

    Де:

    • Текст (обов'язково) - текстовий рядок для пошуку.
    • Візерунок (обов'язково) - регулярний вираз для перевірки.
    • Номер примірника (необов'язково) - серійний номер, який вказує на те, який екземпляр витягувати. Якщо не вказано, повертає всі знайдені збіги (за замовчуванням).
    • Match_case (необов'язковий) - визначає, чи співставляти (TRUE або пропущено) або ігнорувати (FALSE) регістр тексту.

    Отримати код функції можна за посиланням.

    Приклад: як витягувати рядки з допомогою регулярних виразів

    Продовжуючи наш приклад, давайте витягнемо номери рахунків-фактур. Для цього ми будемо використовувати дуже простий регекс, який відповідає будь-якому 7-значному числу:

    Візерунок : \b\d{7}\b

    Помістіть візерунок у форматі А2 і ви виконаєте роботу за допомогою цієї компактної та елегантної формули:

    =RegExpExtract(A5, $A$2)

    Якщо шаблон знайдено, формула витягує номер накладної, якщо не знайдено - нічого не повертається.

    Більше прикладів можна знайти в статті: Як витягти рядки в Excel за допомогою regex.

    Функція заміни в Excel Regex

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

    RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

    Де:

    • Текст (обов'язково) - текстовий рядок для пошуку.
    • Візерунок (обов'язково) - регулярний вираз для перевірки.
    • Заміна (обов'язково) - текст, яким потрібно замінити відповідні підрядки.
    • Номер примірника (необов'язково) - екземпляр для заміни, за замовчуванням - "всі збіги".
    • Match_case (необов'язково) - керує відповідністю (TRUE або пропущено) або ігноруванням (FALSE) регістру тексту.

    З кодом функції можна ознайомитися за посиланням.

    Приклад: як замінити або видалити рядки з допомогою регексів

    Деякі з наших записів містять номери кредитних карт. Ця інформація є конфіденційною, і ви можете захотіти замінити її чимось або видалити зовсім. Обидва завдання можна виконати за допомогою RegExpReplace Як? У другому сценарії ми замінимо на порожній рядок.

    У нашому прикладі таблиці всі номери карток мають по 16 цифр, які записані в 4 групи через пробіли. Щоб їх знайти, ми відтворюємо шаблон за допомогою цього регулярного виразу:

    Візерунок : \b\d{4} \d{4} \d{4} \d{4} \d{4}\b

    Для заміни використовується наступний рядок:

    Заміна XXXX XXXX XXXX XXXX XXXX

    І ось повна формула для заміна номери кредитних карток з неконфіденційною інформацією:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX")

    З регексом і текстом заміни в окремих комірках (А2 і В2) формула працює однаково добре:

    В Excel "видалення" є окремим випадком "заміни". видалити номери кредитних карток, просто використовуйте порожній рядок ("") для заміна аргумент:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")

    Порада. Щоб отримати в результатах рядок з порожніми рядками, можна скористатися іншою функцією RegExpReplace, як показано в цьому прикладі: Як видалити порожні рядки за допомогою regex.

    Більш детальну інформацію можна знайти за посиланням:

    • Як замінити рядки в Excel за допомогою regex
    • Як видалити рядки з допомогою regex
    • Як видалити пробіли з допомогою регексів

    Regex Tools для зіставлення, вилучення, заміни та видалення підрядків

    Користувачі нашого Ultimate Suite можуть отримати всю потужність регулярних виразів, не вставляючи жодного рядка коду в свої робочі книги. Весь необхідний код написаний нашими розробниками і плавно інтегрований в ваш Excel під час установки.

    На відміну від функцій VBA, розглянутих вище, функції Ultimate Suite засновані на .NET, що дає дві основні переваги:

    1. Ви можете використовувати регулярні вирази у звичайних книгах .xlsx без додавання коду VBA і збереження їх у вигляді файлів з підтримкою макросів.
    2. NET Regex підтримує повнофункціональні класичні регулярні вирази, що дозволяє будувати більш складні шаблони.

    Як використовувати Regex в Excel

    Після встановлення Ultimate Suite використання регулярних виразів в Excel стає таким же простим, як і ці два кроки:

    1. Про це йдеться на Дані про абіти у вкладці Текст групу, натисніть Regex Tools .

    2. Про це йдеться на Regex Tools виконайте наступні дії:
      • Виберіть вихідні дані.
      • Введіть свій шаблон регексу.
      • Оберіть потрібний варіант: Матч , Витяг , Видалити або Замінити .
      • Щоб отримати результат у вигляді формули, а не значення, виберіть Вставити як формулу прапорець.
      • Натиснути кнопку дії.

      Наприклад, щоб прибрати номери кредитних карток з комірок А2:А6, налаштуємо такі параметри:

    У тричі, функція AblebitsRegex буде вставлена в новий стовпець праворуч від ваших вихідних даних. У нашому випадку це формула:

    =AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")

    Після того, як формула буде там, ви можете редагувати, копіювати або переміщати її, як будь-яку іншу формулу.

    Як вставити Regex-формулу безпосередньо в комірку

    Функції AblebitsRegex також можна вставляти безпосередньо в комірку без використання інтерфейсу надбудови. Ось як це зробити:

    1. Натисніть на кнопку fx в рядку формул або Функція вставки на Формули рахунок.
    2. В рамках проекту Функція вставки виберіть у діалоговому вікні AblebitsUDF оберіть функцію, що Вас цікавить, та натисніть кнопку ОК.

    3. Визначте аргументи функції, як ви зазвичай це робите, і натисніть кнопку ОК. Готово!

    Для отримання додаткової інформації, будь ласка, зверніться до Regex Tools for Excel.

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

    Доступні для завантаження

    Excel Regex - приклади формул (файл .xlsm)

    Ultimate Suite - пробна версія (файл .exe)

    Майкл Браун — відданий ентузіаст технологій із пристрастю до спрощення складних процесів за допомогою програмних засобів. Маючи понад десятирічний досвід роботи в технологічній індустрії, він відточив свої навички роботи з Microsoft Excel і Outlook, а також із Google Таблицями та Документами. Блог Майкла присвячений тому, щоб поділитися своїми знаннями та досвідом з іншими, надаючи прості поради та навчальні посібники для підвищення продуктивності та ефективності. Незалежно від того, чи є ви досвідченим професіоналом чи початківцем, блог Майкла пропонує цінну інформацію та практичні поради щодо отримання максимальної користі від цих основних програмних інструментів.