Съдържание
Никога не можехте да разберете защо регулярните изрази не се поддържат във формулите на Excel? Сега вече се поддържат :) С нашите персонализирани функции можете лесно да намирате, заменяте, извличате и премахвате низове, които отговарят на определен шаблон.
На пръв поглед Excel разполага с всичко, от което бихте могли да се нуждаете за манипулиране на текстови низове. Хм... а какво да кажем за регулярните изрази? Упс, в Excel няма вградени функции Regex. Но никой не казва, че не можем да създадем свои собствени :)
Какво представлява регулярният израз?
Регулярен израз (известен още като регекс или regexp ) е специално кодирана последователност от знаци, която определя шаблон за търсене. Използвайки този шаблон, можете да намерите съответстваща комбинация от знаци в низ или да валидирате въведени данни. Ако сте запознати с обозначението на заместващите знаци, можете да мислите за регексите като за усъвършенствана версия на заместващите знаци.
Регулярните изрази имат собствен синтаксис, състоящ се от специални символи, оператори и конструкции. Например [0-5] съвпада с всяка единична цифра от 0 до 5.
Регулярните изрази се използват в много езици за програмиране, включително JavaScript и VBA. Последният има специален обект RegExp, който ще използваме за създаване на нашите потребителски функции.
Поддържа ли Excel regex?
За съжаление в Excel няма вградени функции Regex. За да можете да използвате регулярни изрази във формулите си, ще трябва да създадете собствена функция, дефинирана от потребителя (базирана на VBA или .NET), или да инсталирате инструменти на трети страни, поддържащи regexes.
Excel Regex справка
Независимо дали един regex шаблон е много прост, или изключително сложен, той се изгражда с помощта на общия синтаксис. Този урок няма за цел да ви научи на регулярни изрази. За целта има много ресурси онлайн - от безплатни уроци за начинаещи до първокласни курсове за напреднали потребители.
По-долу предоставяме кратка справка за основните RegEx модели, която ще ви помогне да се запознаете с основите. Тя може да ви послужи и като информационен лист при изучаване на допълнителни примери.
Ако имате опит с регулярните изрази, можете да преминете направо към функциите RegExp.
Символи
Това са най-често използваните шаблони за съвпадение на определени символи.
Модел | Описание | Пример: | Мачове |
. | Заместващ символ: съвпада с всеки отделен символ с изключение на прекъсване на ред | .ot | точка , горещо , гърне , @ot |
\d | Цифров символ: всяка единична цифра от 0 до 9 | \d | В а1б , съвпадения 1 |
\D | Всеки символ, който НЕ е цифра | \D | В а1б , съвпадения a и b |
\s | Бели символи: интервал, табулация, нов ред и връщане на карета | .\s. | В 3 цента , съвпадения 3 c |
\S | Всеки символ, който не е бял интервал | \S+ | В 30 цента , съвпадения 30 и центове |
\w | Символ на думата: всяка ASCII буква, цифра или долна черта | \w+ | В 5_котки*** , съвпадения 5_cats |
\W | Всеки символ, който НЕ е буквено-цифров символ или долна черта | \W+ | В 5_котки*** , съвпадения *** |
\t | Tab | ||
\n | Нова линия | \n\d+ | В двуредовия низ по-долу съвпаденията са 10 5 котки 10 кучета |
\ | Избягва специалното значение на даден символ, за да можете да го търсите | \. \w+\. | Избягва точка, за да можете да намерите буквалния символ "." в низ Г-н. , Г-жа , Проф. |
Класове герои
С помощта на тези шаблони можете да съчетавате елементи от различни набори от символи.
Модел | Описание | Пример: | Мачове |
[символи] | Съвпада с всеки отделен символ в скобите | d[oi]g | куче и копайте |
[^символи] | Съвпада с всеки отделен символ, който НЕ е в скобите | d[^oi]g | Мачове dag, dug , d1g Не съвпада куче и копайте |
[от-до] | Съвпада с всеки символ в диапазона между скобите | [0-9] [a-z] [A-Z] | Всяка единична цифра от 0 до 9 Всяка единична малка буква Всяка единична главна буква |
Квантификатори
Квантификаторите са специални изрази, които определят броя на символите, които да бъдат сравнявани. Квантификаторът винаги се прилага към символа преди него.
Модел | Описание | Пример: | Мачове |
* | Нула или повече случаи | 1a* | 1, 1a , 1aa, 1aaa , и т.н. |
+ | Една или повече появявания | по+ | В гърне , съвпадения по В беден , съвпадения кака |
? | Нула или една поява | роа?д | път, прът |
*? | Нула или повече случаи, но колкото е възможно по-малко | 1a*? | В 1a , 1а и 1ааа , съвпадения 1a |
+? | Една или повече появявания, но възможно най-малко. | по+? | В гърне и беден , съвпадения по |
?? | Нула или една поява, но колкото е възможно по-малко | роа?? | В път и пръчка , съвпадения ро |
{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 и улавя 5 и 10 , които са в групи за улавяне |
\2 | Съдържание на група 2 |
Котви
Анкорите посочват позиция във входния низ, в която да се търси съответствие.
Котва | Описание | Пример: | Мачове |
^ | Начало на низ Забележка: [^вътре в скобите] означава "не". | ^\d+ | Всякакъв брой цифри в началото на низа. В 5 котки и 10 кучета , съвпадения 5 |
$ | Край на низ | \d+$ | Всякакъв брой цифри в края на низа. В 10 плюс 5 дава 15 , мачове 15 |
\b | Граница на думата | \bjoy\b | Мачове joy като отделна дума, но не и в приятен . |
\B | НЕ е граница на думата | \Bjoy\B | Мачове joy в приятен , но не и като отделна дума. |
Конструкция на алтернация (OR)
Операндът за редуване активира логиката OR, така че можете да съответствате на този или онзи елемент.
Изграждане на | Описание | Пример: | Мачове |
Съвпада с всеки отделен елемент, разделен с вертикалната лента | (s | В тя продава мидички, съвпада с продава и черупки |
Обходни пътища
Конструкциите за обхождане са полезни, когато искате да съпоставите нещо, което е или не е последвано или предхождано от нещо друго. Тези изрази понякога се наричат "твърдения с нулева ширина" или "съвпадение с нулева ширина", тъй като съвпадат с позиция, а не с действителни символи.
Забележка. Във 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). В нашия случай това зависи от начина, по който сте конфигурирали незадължителния match_case По подразбиране всички функции са отчитане на малки и големи букви .
Ограничения на VBA RegExp
Excel VBA имплементира основните regex шаблони, но му липсват много разширени функции, налични в .NET, Perl, Java и други regex двигатели. Например VBA RegExp не поддържа инлайн модификатори, като (?i) за съвпадение без значение на големи и малки букви или (?m) за многоредов режим, lookbehinds, POSIX класове и др.
Функция Excel Regex Match
Сайтът RegExpMatch Функцията търси във входния низ текст, който отговаря на регулярен израз, и връща TRUE, ако е намерено съответствие, и FALSE в противен случай.
RegExpMatch(текст, шаблон, [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:
Ако приемем, че оригиналният низ е в A5, формулата е следната:
=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), "Yes", "No")
За повече примери на формули вижте:
- Как да сравнявате низове с помощта на регулярни изрази
- Утвърждаване на данни в Excel с регексиси
Excel Regex Функция за извличане
Сайтът RegExpExtract функцията търси поднизове, които съответстват на регулярен израз, и извлича всички съвпадения или конкретно съвпадение.
RegExpExtract(текст, шаблон, [instance_num], [match_case])Къде:
- Текст (задължително) - текстовият низ, в който ще се търси.
- Модел (задължително) - регулярният израз за съответствие.
- Instance_num (незадължително) - сериен номер, който указва коя инстанция да се извлече. Ако не се посочи, се връщат всички намерени съвпадения (по подразбиране).
- Match_case (незадължително) - определя дали да се съпоставят (TRUE или пропуснато) или игнорират (FALSE) буквите на текста.
Кодът на функцията можете да намерите тук.
Пример: как да извлечете низове с помощта на регулярни изрази
Ако разгледаме примера малко по-подробно, нека извлечем номера на фактури. За целта ще използваме много прост регекс, който отговаря на всяко 7-цифрено число:
Модел : \b\d{7}\b
Поставете модела в A2 и ще си свършите работата с тази компактна и елегантна формула:
=RegExpExtract(A5, $A$2)
Ако е намерен модел, формулата извлича номер на фактура, а ако не е намерено съвпадение - не се връща нищо.
За повече примери вижте: Как да извличаме низове в Excel с помощта на regex.
Функция за заместване на регекса в Excel
Сайтът RegExpReplace замества стойностите, отговарящи на регекс, с посочения от вас текст.
RegExpReplace(текст, шаблон, замяна, [instance_num], [match_case])Къде:
- Текст (задължително) - текстовият низ, в който ще се търси.
- Модел (задължително) - регулярният израз за съответствие.
- Смяна на (задължително) - текстът, с който да се заменят съответстващите поднизове.
- 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
А ето и пълната формула за Замяна на номера на кредитни карти с нечувствителна информация:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX")
При използване на регекса и заместващия текст в отделни клетки (A2 и B2) формулата работи също толкова добре:
В Excel "премахване" е частен случай на "заместване". премахване на номера на кредитни карти, просто използвайте празен низ ("") за замяна аргумент:
=RegExpReplace(A5, "\b\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 в раздела Текст група, щракнете върху Инструменти за регекс .
- На Инструменти за регексиране направете следното:
- Изберете изходните данни.
- Въведете своя regex шаблон.
- Изберете желаната опция: Мач , Извлечение , Премахване на или Замяна на .
- За да получите резултата като формула, а не като стойност, изберете Вмъкване като формула квадратчето за отметка.
- Натиснете бутона за действие.
Например, за да премахнем номерата на кредитните карти от клетките A2:A6, конфигурираме тези настройки:
В един момент функцията AblebitsRegex ще бъде вмъкната в нова колона вдясно от първоначалните данни. В нашия случай формулата е:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")
След като формулата е създадена, можете да я редактирате, копирате или премествате като всяка друга собствена формула.
Как да вмъкнете формула Regex директно в клетка
Функциите AblebitsRegex могат да се вмъкват и директно в клетка, без да се използва интерфейсът на добавката. Ето как:
- Щракнете върху fx в лентата с формули или Функция за вмъкване на Формули таб.
- В Функция за вмъкване диалогов прозорец, изберете AblebitsUDFs категория, изберете интересуващата ви функция и щракнете върху OK.
- Дефинирайте аргументите на функцията, както обикновено, и щракнете върху OK. Готово!
За повече информация вижте "Инструменти за регекс за Excel".
Това е начинът за използване на регулярни изрази за съвпадение, извличане, заместване и премахване на текст в клетките на Excel. Благодаря ви, че прочетохте, и с нетърпение очаквам да ви видя в нашия блог следващата седмица!
Налични изтегляния
Excel Regex - примери за формули (.xlsm файл)
Ultimate Suite - пробна версия (.exe файл)