Obsah
Nikdy ste nepochopili, prečo regulárne výrazy nie sú podporované vo vzorcoch Excelu? Teraz sú :) Pomocou našich vlastných funkcií môžete jednoducho nájsť, nahradiť, vyňať a odstrániť reťazce zodpovedajúce konkrétnemu vzoru.
Na prvý pohľad má Excel všetko, čo by ste mohli potrebovať na manipuláciu s textovými reťazcami. Hmm... a čo regulárne výrazy? Ups, v Exceli nie sú žiadne zabudované funkcie Regex. Ale nikto netvrdí, že si nemôžeme vytvoriť vlastné :)
Čo je regulárny výraz?
Regulárny výraz (tzv. regex alebo regexp ) je špeciálne zakódovaná postupnosť znakov, ktorá definuje vyhľadávací vzor. Pomocou tohto vzoru môžete nájsť zodpovedajúcu kombináciu znakov v reťazci alebo overiť vstupné údaje. Ak poznáte zápis zástupných znakov, môžete si regexy predstaviť ako pokročilú verziu zástupných znakov.
Regulárne výrazy majú vlastnú syntax pozostávajúcu zo špeciálnych znakov, operátorov a konštrukcií. Napríklad [0-5] zodpovedá akejkoľvek jednej číslici od 0 do 5.
Regulárne výrazy sa používajú v mnohých programovacích jazykoch vrátane JavaScriptu a VBA. Ten má špeciálny objekt RegExp, ktorý využijeme na vytvorenie našich vlastných funkcií.
Podporuje Excel regex?
Žiaľ, v programe Excel nie sú zabudované žiadne funkcie Regex. Ak chcete vo vzorcoch používať regulárne výrazy, musíte si vytvoriť vlastnú používateľskú funkciu (založenú na VBA alebo .NET) alebo nainštalovať nástroje tretích strán podporujúce regexy.
Excel Regex cheat sheet
Či už je vzor regexu veľmi jednoduchý alebo extrémne zložitý, je vytvorený pomocou spoločnej syntaxe. Tento návod si nekladie za cieľ naučiť vás regulárne výrazy. Na to existuje množstvo zdrojov na internete, od bezplatných návodov pre začiatočníkov až po prémiové kurzy pre pokročilých používateľov.
Nižšie uvádzame stručný odkaz na hlavné vzory RegEx, ktorý vám pomôže zorientovať sa v základoch. Môže vám poslúžiť aj ako pomocný list pri štúdiu ďalších príkladov.
Ak máte skúsenosti s regulárnymi výrazmi, môžete prejsť priamo k funkciám RegExp.
Postavy
Ide o najčastejšie používané vzory na porovnávanie určitých znakov.
Vzor | Popis | Príklad | Zápasy |
. | Zástupný znak: zodpovedá akémukoľvek jednotlivému znaku okrem zalomenia riadku | .ot | bodka , horúce , hrniec , @ot |
\d | Znak číslice: akákoľvek jedna číslica od 0 do 9 | \d | Na stránke a1b , zápasy 1 |
\D | Akýkoľvek znak, ktorý NIE je číslica | \D | Na stránke a1b , zápasy a a b |
\s | Biely znak: medzera, tabulátor, nový riadok a návrat vozíka | .\s. | Na stránke 3 centy , zápasy 3 c |
\S | Akýkoľvek znak, ktorý nie je bielym medzerníkom | \S+ | Na stránke 30 centov , zápasy 30 a centov |
\w | Znak slova: akékoľvek písmeno ASCII, číslica alebo podčiarkovník | \w+ | Na stránke 5_cats*** , zápasy 5_cats |
\W | Akýkoľvek znak, ktorý NIE je alfanumerický znak alebo podčiarkovník | \W+ | Na stránke 5_cats*** , zápasy *** |
\t | Karta | ||
\n | Nový riadok | \n\d+ | V nasledujúcom dvojriadkovom reťazci zodpovedá 10 5 mačiek 10 psov |
\ | uniká špeciálny význam znaku, takže ho môžete vyhľadať | \. \w+\. | Vynecháva bodku, aby ste mohli nájsť doslovný znak "." v reťazci Pán. , Pani. , Prof. |
Triedy znakov
Pomocou týchto vzorov môžete priradiť prvky rôznych znakových sád.
Vzor | Popis | Príklad | Zápasy |
[znaky] | Zodpovedá ľubovoľnému jednotlivému znaku v zátvorkách | d[oi]g | pes a kopať |
[^znakov] | Zodpovedá ľubovoľnému jednotlivému znaku, ktorý nie je v zátvorkách | d[^oi]g | Zápasy dag, dug , d1g Nezodpovedá pes a kopať |
[od-do] | Zodpovedá akémukoľvek znaku v rozsahu medzi zátvorkami | [0-9] [a-z] [A-Z] | Akákoľvek jedna číslica od 0 do 9 Akékoľvek jedno malé písmeno Akékoľvek jedno veľké písmeno |
Kvantifikátory
Kvantifikátory sú špeciálne výrazy, ktoré určujú počet znakov, ktoré sa majú porovnať. Kvantifikátor sa vždy vzťahuje na znak, ktorý je pred ním.
Vzor | Popis | Príklad | Zápasy |
* | Nula alebo viac výskytov | 1a* | 1, 1a , 1aa, 1aaa , atď. |
+ | Jeden alebo viac výskytov | po+ | Na stránke hrniec , zápasy po Na stránke chudobný , zápasy hovienka |
? | Nula alebo jeden výskyt | roa?d | cesta, tyč |
*? | Nula alebo viac výskytov, ale čo najmenej | 1a*? | Na stránke 1a , 1aa a 1aaa , zápasy 1a |
+? | Jeden alebo viac výskytov, ale čo najmenej | po+? | Na stránke hrniec a chudobný , zápasy po |
?? | Nula alebo jeden výskyt, ale čo najmenej | roa?? | Na stránke cesta a tyč , zápasy ro |
{n} | Zodpovedá predchádzajúcemu vzoru n-krát | \d{3} | Presne 3 číslice |
{n,} | Zodpovedá predchádzajúcemu vzoru n alebo viackrát | \d{3,} | 3 alebo viac číslic |
{n,m} | Zodpovedá predchádzajúcemu vzoru n až m-krát | \d{3,5} | Od 3 do 5 číslic |
Zoskupenie
Konštrukcie na zoskupovanie sa používajú na zachytenie podreťazca zo zdrojového reťazca, aby ste s ním mohli vykonať nejakú operáciu.
Syntax | Popis | Príklad | Zápasy |
(vzor) | Zachytenie skupiny: zachytí zodpovedajúci podreťazec a priradí mu poradové číslo | (\d+) | Na stránke 5 mačiek a 10 psov , zachytáva 5 (skupina 1) a 10 (skupina 2) |
(?:vzor) | Nezachytávajúca skupina: zodpovedá skupine, ale nezachytáva ju | (\d+)(?: psy) | Na stránke 5 mačiek a 10 psov , zachytáva 10 |
\1 | Obsah skupiny 1 | (\d+)\+(\d+)=\2\+\1 | Zodpovedá 5+10=10+5 a zachytáva 5 a 10 , ktoré sú v zachytávacích skupinách |
\2 | Obsah skupiny 2 |
Kotvy
Kotvy určujú pozíciu vo vstupnom reťazci, kde sa má hľadať zhoda.
Kotva | Popis | Príklad | Zápasy |
^ | Začiatok reťazca Poznámka: [^v zátvorke] znamená "nie" | ^\d+ | Ľubovoľný počet číslic na začiatku reťazca. Na stránke 5 mačiek a 10 psov , zápasy 5 |
$ | Koniec reťazca | \d+$ | Ľubovoľný počet číslic na konci reťazca. Na stránke 10 plus 5 je 15 , zápasy 15 |
\b | Hranica slova | \bjoy\b | Zápasy joy ako samostatné slovo, ale nie v príjemné . |
\B | NIE slovná hranica | \Bjoy\B | Zápasy joy na stránke príjemné , ale nie ako samostatné slovo. |
Konštrukcia striedania (OR)
Striedavý operand umožňuje logiku OR, takže môžete priradiť buď tento, alebo tento prvok.
Konštrukcia | Popis | Príklad | Zápasy |
Zodpovedá ľubovoľnému jednotlivému prvku oddelenému zvislou čiarou | (s | Na stránke predáva mušle, zodpovedá predáva a mušle |
Vyhľadávanie
Konštrukcie typu Lookaround sú užitočné, keď chcete porovnať niečo, čo je alebo nie je nasledované alebo predchádzané niečím iným. Tieto výrazy sa niekedy nazývajú "tvrdenia s nulovou šírkou" alebo "zhoda s nulovou šírkou", pretože porovnávajú skôr pozíciu ako skutočné znaky.
Poznámka: V príchuti VBA RegEx nie sú podporované lookbehinds.
Vzor | Popis | Príklad | Zápasy |
(?=) | Pozitívny výhľad | X(?=Y) | Zodpovedá výrazu X, ak po ňom nasleduje výraz Y (t. j. ak je výraz Y pred výrazom X) |
(?!) | Záporný výhľad | X(?!Y) | Zodpovedá výrazu X, ak po ňom NIE JE uvedené Y |
(?<=) | Pozitívny pohľad dozadu | (?<=Y)X | Zodpovedá výrazu X, ak mu predchádza výraz Y (t. j. ak je za výrazom X výraz Y) |
(? )</td | Negatívny pohľad dozadu | (? Y)X</td | Zodpovedá výrazu X, ak mu nepredchádza výraz Y |
Teraz, keď už poznáte základné informácie, prejdeme k najzaujímavejšej časti - k používaniu regexov na reálnych údajoch na rozbor reťazcov a vyhľadávanie požadovaných informácií. Ak potrebujete podrobnejšie informácie o syntaxi, môže vám pomôcť príručka spoločnosti Microsoft o jazyku regulárnych výrazov.
Vlastné funkcie RegEx pre aplikáciu Excel
Ako už bolo spomenuté, Microsoft Excel nemá zabudované funkcie RegEx. Aby sme regulárne výrazy umožnili, vytvorili sme tri vlastné funkcie VBA (tzv. funkcie definované používateľom). Kódy môžete skopírovať z nižšie uvedených odkazovaných stránok alebo z nášho vzorového zošita a potom ich vložiť do vlastných súborov Excel.
Ako fungujú funkcie VBA RegExp
Táto časť vysvetľuje vnútornú mechaniku a môže byť zaujímavá pre tých, ktorí chcú presne vedieť, čo sa deje na zadnej strane.
Ak chcete začať používať regulárne výrazy vo VBA, musíte buď aktivovať knižnicu referencií na objekty RegEx, alebo použiť funkciu CreateObject. Aby sme vám ušetrili prácu s nastavovaním referencie v editore VBA, zvolili sme druhý prístup.
Objekt RegExp má 4 vlastnosti:
- Vzor - je vzor na porovnanie vo vstupnom reťazci.
- Globálne - určuje, či sa majú nájsť všetky zhody vo vstupnom reťazci, alebo len prvá z nich. V našich funkciách je nastavená na hodnotu True, aby sme získali všetky zápasy .
- MultiLine - určuje, či sa má vzor porovnávať cez zlomy riadkov vo viacriadkových reťazcoch alebo len v prvom riadku. V našich kódoch je nastavená na hodnotu True, aby sa hľadalo v každom riadku .
- IgnoreCase - definuje, či je regulárny výraz citlivý na veľkosť písmen (predvolené nastavenie) alebo nerozlišuje veľkosť písmen (nastavené na True). V našom prípade to závisí od toho, ako nakonfigurujete voliteľný match_case Predvolene sú všetky funkcie rozlišovanie veľkých a malých písmen .
Obmedzenia VBA RegExp
Excel VBA implementuje základné regexové vzory, ale chýbajú mu mnohé pokročilé funkcie dostupné v jazykoch .NET, Perl, Java a iných regexových enginoch. Napríklad VBA RegExp nepodporuje riadkové modifikátory, ako napríklad (?i) pre porovnávanie bez rozlišovania veľkých a malých písmen alebo (?m) pre viacriadkový režim, lookbehinds, POSIX triedy a ďalšie.
Funkcia Excel Regex Match
Stránka RegExpMatch funkcia vyhľadá vo vstupnom reťazci text, ktorý zodpovedá regulárnemu výrazu, a vráti TRUE, ak sa nájde zhoda, inak FALSE.
RegExpMatch(text, vzor, [match_case])Kde:
- Text (povinné) - jeden alebo viac reťazcov na vyhľadávanie.
- Vzor (povinné) - regulárny výraz, ktorý sa má porovnať.
- Match_case (nepovinné) - typ zhody. TRUE alebo vynechať - rozlišovanie veľkých a malých písmen; FALSE - nerozlišovanie veľkých a malých písmen
Kód funkcie je tu.
Príklad: ako používať regulárne výrazy na porovnávanie reťazcov
Predpokladajme, že v nižšie uvedenom súbore údajov chcete identifikovať položky obsahujúce kódy SKU.
Vzhľadom na to, že každá SKU začína dvoma veľkými písmenami, za ktorými nasleduje pomlčka a 4 číslice, môžete ich porovnať pomocou nasledujúceho výrazu.
Vzor : \b[A-Z]{2}-\d{4}\b
Kde [A-Z]{2} znamená akékoľvek 2 veľké písmená od A po Z a \d{4} znamená akékoľvek 4 číslice od 0 po 9. Hranica slov \b označuje, že SKU je samostatné slovo a nie súčasť väčšieho reťazca.
Po vytvorení vzoru začnite písať vzorec ako zvyčajne a názov funkcie sa objaví v zozname navrhnutom funkciou Automatické dokončovanie programu Excel:
Za predpokladu, že pôvodný reťazec je v tvare A5, vzorec vyzerá takto:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Pre väčšie pohodlie môžete regulárny výraz zadať do samostatnej bunky a použiť absolútny odkaz ($A$2) pre vzor argument. Tým sa zabezpečí, že adresa bunky zostane nezmenená, keď vzorec skopírujete do iných buniek:
=RegExpMatch(A5, $A$2)
Ak chcete zobraziť vlastné textové označenia namiesto TRUE a FALSE, vložte funkciu RegExpMatch do funkcie IF a zadajte požadované texty do políčka value_if_true a value_if_false argumenty:
=IF(RegExpMatch(A5, $A$2), "Áno", "Nie")
Ďalšie príklady vzorcov nájdete na:
- Ako priradiť reťazce pomocou regulárnych výrazov
- Overovanie údajov programu Excel pomocou regexov
Funkcia Excel Regex Extract
Stránka RegExpExtract funkcia vyhľadá podreťazce, ktoré zodpovedajú regulárnemu výrazu, a extrahuje všetky zhody alebo konkrétnu zhodu.
RegExpExtract(text, vzor, [instance_num], [match_case])Kde:
- Text (povinné) - textový reťazec, v ktorom sa má vyhľadávať.
- Vzor (povinné) - regulárny výraz, ktorý sa má porovnať.
- Instance_num (nepovinné) - poradové číslo, ktoré označuje, ktorá inštancia sa má extrahovať. Ak sa vynechá, vráti všetky nájdené zhody (predvolené).
- Match_case (nepovinné) - definuje, či sa majú porovnať (TRUE alebo vynechať) alebo ignorovať (FALSE) veľké a malé písmená textu.
Kód funkcie môžete získať tu.
Príklad: ako extrahovať reťazce pomocou regulárnych výrazov
Ak náš príklad posunieme o niečo ďalej, vyberieme čísla faktúr. Na tento účel použijeme veľmi jednoduchý regex, ktorý zodpovedá akémukoľvek sedemmiestnemu číslu:
Vzor : \b\d{7}\b
Vložte vzor do A2 a s týmto kompaktným a elegantným vzorcom urobíte svoju prácu:
=RegExpExtract(A5, $A$2)
Ak sa nájde zhoda so vzorom, vzorec vyberie číslo faktúry, ak sa nenájde žiadna zhoda, nevráti sa nič.
Ďalšie príklady nájdete v časti: Ako extrahovať reťazce v programe Excel pomocou regexu.
Funkcia Excel Regex Replace
Stránka RegExpReplace nahradí hodnoty zodpovedajúce regexu zadaným textom.
RegExpReplace(text, vzor, náhrada, [číslo_inštancie], [prípad_zhody])Kde:
- Text (povinné) - textový reťazec, v ktorom sa má vyhľadávať.
- Vzor (povinné) - regulárny výraz, ktorý sa má porovnať.
- Náhrada (povinné) - text, ktorým sa nahradia zodpovedajúce podreťazce.
- Instance_num (nepovinné) - inštancia, ktorá sa má nahradiť. Predvolené nastavenie je "all matches".
- Match_case (nepovinné) - určuje, či sa má porovnať (TRUE alebo vynechať) alebo ignorovať (FALSE) veľkosť písmen textu.
Kód funkcie je k dispozícii tu.
Príklad: ako nahradiť alebo odstrániť reťazce pomocou regexov
Niektoré z našich záznamov obsahujú čísla kreditných kariet. Tieto informácie sú dôverné a možno ich budete chcieť niečím nahradiť alebo úplne vymazať. Obe úlohy môžete vykonať pomocou RegExpReplace Ako? V druhom scenári budeme nahrádzať prázdny reťazec.
V našej vzorovej tabuľke majú všetky čísla kariet 16 číslic, ktoré sú zapísané v 4 skupinách oddelených medzerami. Aby sme ich našli, zopakujeme vzor pomocou tohto regulárneho výrazu:
Vzor : \b\d{4} \d{4} \d{4} \d{4}\b
Na nahradenie sa používa tento reťazec:
Náhrada : XXXX XXXX XXXX XXXX
A tu je kompletný vzorec na nahradiť čísla kreditných kariet s necitlivými informáciami:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX")
Pri použití regexu a náhradného textu v samostatných bunkách (A2 a B2) vzorec funguje rovnako dobre:
V programe Excel je "odstránenie" osobitným prípadom "nahradenia". odstrániť čísla kreditných kariet, stačí použiť prázdny reťazec ("") pre náhradný argument:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
Tip. Ak chcete odstrániť prázdne riadky vo výsledkoch, môžete použiť inú funkciu RegExpReplace, ako je uvedené v tomto príklade: Ako odstrániť prázdne riadky pomocou regexu.
Viac informácií nájdete na:
- Ako nahradiť reťazce v programe Excel pomocou regexu
- Ako odstrániť reťazce pomocou regexu
- Ako odstrániť biele znaky pomocou regexov
Nástroje Regex na porovnávanie, extrahovanie, nahrádzanie a odstraňovanie podreťazcov
Používatelia nášho balíka Ultimate Suite môžu získať všetku silu regulárnych výrazov bez toho, aby do svojich zošitov vložili jediný riadok kódu. Všetok potrebný kód napíšu naši vývojári a počas inštalácie ho hladko integrujú do vášho Excelu.
Na rozdiel od vyššie uvedených funkcií VBA sú funkcie balíka Ultimate Suite založené na technológii .NET, čo prináša dve hlavné výhody:
- Regulárne výrazy môžete používať v bežných zošitoch .xlsx bez pridávania kódu VBA a bez nutnosti ukladať ich ako súbory s povolenými makrami.
- Engine .NET Regex podporuje plnohodnotné klasické regulárne výrazy, ktoré umožňujú vytvárať zložitejšie vzory.
Ako používať regex v programe Excel
S nainštalovanou sadou Ultimate Suite je používanie regulárnych výrazov v programe Excel také jednoduché ako tieto dva kroky:
- Na Údaje Ablebits na karte Text kliknite na položku Nástroje Regex .
- Na Nástroje Regex vykonajte nasledujúce kroky:
- Vyberte zdrojové údaje.
- Zadajte svoj regexový vzor.
- Vyberte požadovanú možnosť: Zápas , Výpis , Odstránenie stránky alebo Vymeňte stránku .
- Ak chcete získať výsledok ako vzorec a nie ako hodnotu, vyberte Vložiť ako vzorec zaškrtávacie políčko.
- Stlačte tlačidlo akcie.
Ak chceme napríklad odstrániť čísla kreditných kariet z buniek A2:A6, nakonfigurujeme tieto nastavenia:
Za trikrát sa funkcia AblebitsRegex vloží do nového stĺpca napravo od pôvodných údajov. V našom prípade je vzorec nasledovný:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")
Po vytvorení vzorca ho môžete upravovať, kopírovať alebo presúvať ako akýkoľvek iný vzorec.
Ako vložiť vzorec Regex priamo do bunky
Funkcie AblebitsRegex možno vložiť aj priamo do bunky bez použitia rozhrania doplnku. Tu je uvedený postup:
- Kliknite na tlačidlo fx na paneli vzorcov alebo Vložiť funkciu na Vzorce tab.
- V Vložiť funkciu v dialógovom okne vyberte AblebitsUDFs kategóriu, vyberte funkciu, ktorá vás zaujíma, a kliknite na tlačidlo OK.
- Definujte argumenty funkcie ako zvyčajne a kliknite na tlačidlo OK. Hotovo!
Ďalšie informácie nájdete v časti Nástroje Regex pre Excel.
To je spôsob, ako používať regulárne výrazy na porovnávanie, extrahovanie, nahrádzanie a odstraňovanie textu v bunkách programu Excel. Ďakujem vám za prečítanie a teším sa na vás na našom blogu budúci týždeň!
Dostupné súbory na stiahnutie
Excel Regex - príklady vzorcov (.xlsm súbor)
Ultimate Suite - skúšobná verzia (.exe súbor)