Tartalomjegyzék
Soha nem értette, hogy a reguláris kifejezések miért nem támogatottak az Excel-képletekben? Most már igen :) Egyéni függvényeinkkel könnyedén megtalálhatja, kicserélheti, kiveheti és eltávolíthatja a meghatározott mintának megfelelő karakterláncokat.
Első pillantásra az Excel mindent tartalmaz, amire csak szükségünk lehet a szöveges karakterláncok manipulálásához. Hmm... mi a helyzet a reguláris kifejezésekkel? Hoppá, az Excelben nincsenek beépített Regex függvények. De senki sem mondja, hogy nem tudunk sajátokat létrehozni :)
Mi az a reguláris kifejezés?
A reguláris kifejezés (más néven regex vagy regexp ) egy speciálisan kódolt karaktersorozat, amely egy keresési mintát határoz meg. A minta segítségével megkeresheti a megfelelő karakterkombinációt egy karakterláncban vagy érvényesítheti az adatbevitelt. Ha ismeri a joker jelölést, akkor a regexeket a jokerek továbbfejlesztett változatának tekintheti.
A reguláris kifejezéseknek saját szintaxisa van, amely speciális karakterekből, operátorokból és szerkezetekből áll. Például a [0-5] bármely 0 és 5 közötti számjegyre illik.
A reguláris kifejezéseket számos programozási nyelvben használják, beleértve a JavaScriptet és a VBA-t. Ez utóbbi rendelkezik egy speciális RegExp objektummal, amelyet az egyéni függvények létrehozásához fogunk használni.
Támogatja az Excel a regexet?
Sajnálatos módon az Excelben nincsenek beépített Regex-funkciók. Ahhoz, hogy a reguláris kifejezéseket a képletekben használhassa, saját felhasználó által definiált (VBA vagy .NET alapú) függvényt kell létrehoznia, vagy harmadik féltől származó, a regexeket támogató eszközöket kell telepítenie.
Excel Regex puskázó lap
Akár nagyon egyszerű, akár rendkívül bonyolult egy regex minta, a közös szintaxis alapján épül fel. Ennek a bemutatónak nem célja, hogy megtanítsa a reguláris kifejezéseket. Ehhez rengeteg forrás áll rendelkezésre az interneten, a kezdőknek szóló ingyenes oktatóprogramoktól a haladó felhasználóknak szóló prémium tanfolyamokig.
Az alábbiakban egy gyors referenciát adunk a főbb RegEx mintákról, amely segít az alapok elsajátításában, és további példák tanulmányozásakor puskapéldaként is szolgálhat.
Ha már ismeri a reguláris kifejezéseket, akkor egyenesen a RegExp függvényekhez ugorhat.
Karakterek
Ezek a leggyakrabban használt minták bizonyos karakterek megfeleltetésére.
Mintázat | Leírás | Példa | Gyufa |
. | Wildcard karakter: bármely karakterrel megegyezik, kivéve a sortörést. | .ot | pont , hot , pot , @ot |
\d | Számjegy karakter: 0 és 9 közötti bármelyik számjegy | \d | A oldalon. a1b , gyufa 1 |
\D | Bármely karakter, amely NEM számjegy | \D | A oldalon. a1b , gyufa a és b |
\s | Üres hely karakter: szóköz, tabulátor, új sor és kocsivisszatérés | .\s. | A oldalon. 3 cent , gyufa 3 c |
\S | Bármely nem szóköz karakter | \S+ | A oldalon. 30 cent , gyufa 30 és centek |
\w | Szó karakter: bármely ASCII betű, számjegy vagy aláhúzás | \w+ | A oldalon. 5_cats*** , gyufa 5_cats |
\W | Bármilyen karakter, amely NEM alfanumerikus karakter vagy aláhúzás | \W+ | A oldalon. 5_cats*** , gyufa *** |
\t | Tab | ||
\n | Új vonal | \n\d+ | Az alábbi kétsoros karakterláncban a 10 találat 5 macska 10 kutya |
\ | Megszökik egy karakter speciális jelentése, így kereshetsz rá | \. \w+\. | Megkerüli a pontot, hogy megtalálhassa a szó szerinti "." karaktert egy karakterláncban. Mr. , Mrs. , Prof. |
Karakter osztályok
Ezekkel a mintákkal különböző karakterkészletek elemei illeszthetők egymáshoz.
Mintázat | Leírás | Példa | Gyufa |
[karakterek] | A zárójelben lévő bármelyik karakterre illeszkedik | d[oi]g | kutya és dig |
[^karakterek] | Bármely, a zárójelben NEM szereplő karaktert egyezik. | d[^oi]g | Gyufa dag, dig , d1g Nem egyezik kutya és dig |
[from-to] | A zárójelek közötti tartományban lévő bármely karakterre illeszkedik. | [0-9] [a-z] [A-Z] | Bármely 0 és 9 közötti számjegy Bármely kisbetűs betű Bármely nagybetűs betű |
Kvantorok
A kvantorok olyan speciális kifejezések, amelyek megadják a megfeleltetendő karakterek számát. A kvantor mindig az előtte lévő karakterre vonatkozik.
Mintázat | Leírás | Példa | Gyufa |
* | Nulla vagy több előfordulás | 1a* | 1, 1a , 1aa, 1aaa stb. |
+ | Egy vagy több előfordulás | po+ | A oldalon. pot , gyufa po A oldalon. szegény , gyufa poo |
? | Nulla vagy egy előfordulás | roa?d | út, rúd |
*? | Nulla vagy több, de a lehető legkevesebb előfordulás. | 1a*? | A oldalon. 1a , 1aa és 1aaa , gyufa 1a |
+? | Egy vagy több, de lehetőleg minél kevesebb előfordulás. | po+? | A oldalon. pot és szegény , gyufa po |
?? | Nulla vagy egy előfordulás, de minél kevesebb, amennyire lehetséges | roa?? | A oldalon. út és rúd , gyufa ro |
{n} | Az előző mintával n-szer egyezik | \d{3} | Pontosan 3 számjegy |
{n,} | Az előző mintát legalább n-szer egyezik meg. | \d{3,} | 3 vagy több számjegy |
{n,m} | Az előző mintát n és m közötti alkalommal illeszti be. | \d{3,5} | 3-tól 5 számjegyig |
Csoportosítás
A csoportosítási konstrukciókat arra használjuk, hogy a forrás karakterláncból egy részláncot ragadjunk ki, hogy valamilyen műveletet hajthassunk végre vele.
Szintaxis | Leírás | Példa | Gyufa |
(minta) | Rögzítő csoport: rögzíti az egyező részláncot, és rendel hozzá egy rendszámot. | (\d+) | A oldalon. 5 macska és 10 kutya , elfogja 5 (1. csoport) és 10 (2. csoport) |
(?:pattern) | Nem rögzítő csoport: egyezik egy csoporttal, de nem rögzíti azt. | (\d+)(?: kutyák) | A oldalon. 5 macska és 10 kutya , elfogja 10 |
\1 | Az 1. csoport tartalma | (\d+)\+(\d+)=\2\+\1 | Egyezik 5+10=10+5 és rögzíti 5 és 10 , amelyek elfogó csoportokba vannak foglalva |
\2 | A 2. csoport tartalma |
Horgonyok
A horgonyok megadnak egy pozíciót a bemeneti karakterláncban, ahol egyezést kell keresni.
Anchor | Leírás | Példa | Gyufa |
^ | A karakterlánc kezdete Megjegyzés: [^zárójelben] azt jelenti, hogy "nem". | ^\d+ | A karakterlánc elején lévő számjegyek tetszőleges száma. A oldalon. 5 macska és 10 kutya , gyufa 5 |
$ | A karakterlánc vége | \d+$ | Bármennyi számjegy a karakterlánc végén. A oldalon. 10 plusz 5 adja a 15-öt , gyufa 15 |
\b | Szóhatár | \bjoy\b | Gyufa joy külön szó, de nem a élvezetes . |
\B | NEM szóhatár | \Bjoy\B | Gyufa joy a oldalon. élvezetes , de nem külön szóval. |
Alternációs (OR) konstrukció
A váltakozó operandus lehetővé teszi a VAGY logikát, így vagy erre, vagy arra az elemre illeszthető.
Construct | Leírás | Példa | Gyufa |
Egyezik bármelyik függőleges vonallal elválasztott elemmel. | (s | A oldalon. kagylókat árul, megfelel eladja és kagylók |
Look-arounds
A Lookaround-konstrukciók akkor hasznosak, ha olyan dolgot akarunk megfeleltetni, amelyet valami más követ vagy megelőz. Ezeket a kifejezéseket néha "nulla szélességű állításnak" vagy "nulla szélességű egyezésnek" is nevezik, mivel nem tényleges karakterekre, hanem egy pozícióra illeszkednek.
Megjegyzés: A VBA RegEx ízében a lookbehinds nem támogatott.
Mintázat | Leírás | Példa | Gyufa |
(?=) | Pozitív előretekintés | X(?=Y) | Egyezik az X kifejezéssel, ha azt Y követi (azaz ha X előtt Y van). |
(?!) | Negatív előretekintés | X(?!Y) | Egyezik az X kifejezéssel, ha azt NEM követi az Y kifejezés |
(?<=) | Pozitív lookbehind | (?<=Y)X | Egyezik az X kifejezéssel, ha azt Y előzi meg (azaz ha X mögött Y van). |
(? )</td | Negatív lookbehind | (? Y)X</td | Az X kifejezésre illeszkedik, ha NEM előzi meg az Y kifejezés. |
Most, hogy már ismered az alapokat, térjünk rá a legérdekesebb részre - a regexek használatára valós adatokon a karakterláncok elemzésére és a szükséges információk megtalálására. Ha további részletekre van szükséged a szintaxisról, a Microsoft Regular Expression Language című útmutatója hasznos lehet.
Egyéni RegEx függvények az Excel számára
Mint már említettük, a Microsoft Excel nem rendelkezik beépített RegEx függvényekkel. A reguláris kifejezések engedélyezéséhez három egyéni VBA függvényt (más néven felhasználó által definiált függvényeket) hoztunk létre. A kódokat az alább linkelt oldalakról vagy a mintamunkafüzetünkből másolhatja ki, majd beillesztheti a saját Excel fájljaiba.
A VBA RegExp függvények működése
Ez a rész a belső mechanikát magyarázza el, és érdekes lehet azok számára, akik szeretnék tudni, hogy pontosan mi történik a backendben.
Ahhoz, hogy elkezdhessük a reguláris kifejezések használatát a VBA-ban, vagy aktiválnunk kell a RegEx objektumhivatkozási könyvtárat, vagy a CreateObject függvényt kell használnunk. Hogy megspóroljuk a hivatkozás beállításának fáradságát a VBA-szerkesztőben, az utóbbi megközelítést választottuk.
A RegExp objektum 4 tulajdonsággal rendelkezik:
- Mintázat - a minta a bemeneti karakterláncban.
- Globális - szabályozza, hogy az összes találatot keressük-e a bemeneti karakterláncban, vagy csak az elsőt. A mi függvényeinkben True értékre van állítva, hogy a következő eredményt kapjuk minden mérkőzés .
- MultiLine - határozza meg, hogy a többsoros karakterláncoknál a mintát a sortöréseken keresztül, vagy csak az első sorban keressük-e. A mi kódjainkban True értékre van állítva, hogy a keresés minden sorban .
- IgnoreCase - határozza meg, hogy a reguláris kifejezés eset-érzékeny (alapértelmezett) vagy eset-érzéketlen (True értékre állítva) legyen-e. Esetünkben ez attól függ, hogy az opcionális match_case alapértelmezés szerint az összes függvény case-sensitive .
VBA RegExp korlátozások
Az Excel VBA megvalósítja az alapvető regex mintákat, de számos olyan fejlett funkció hiányzik belőle, amely a .NET, Perl, Java és más regex motorokban elérhető. Például a VBA RegExp nem támogatja az olyan soron belüli módosítókat, mint a (?i) a nagy- és kisbetű-független megfeleltetéshez vagy a (?m) a többsoros módhoz, a lookbehinds, a POSIX osztályok, hogy csak néhányat említsünk.
Excel Regex Match funkció
A RegExpMatch függvény egy bemeneti karakterláncban keres olyan szöveget, amely megfelel egy reguláris kifejezésnek, és TRUE-t ad vissza, ha talál egyezést, ellenkező esetben FALSE-t.
RegExpMatch(text, pattern, [match_case])Hol:
- Szöveg (kötelező) - egy vagy több karakterlánc a kereséshez.
- Mintázat (kötelező) - az egyezni kívánt reguláris kifejezés.
- Match_case (opcionális) - az egyezés típusa. TRUE vagy elhagyva - nagy- és kisbetű-érzékeny; FALSE - nagy- és kisbetű-érzéketlen.
A funkció kódja itt található.
Példa: a reguláris kifejezések használata karakterláncok egyeztetésére
Tegyük fel, hogy az alábbi adatkészletben a SKU-kódokat tartalmazó bejegyzéseket szeretné azonosítani.
Mivel minden SKU 2 nagybetűvel kezdődik, amelyet egy kötőjel, majd 4 számjegy követ, a következő kifejezéssel egyezhet meg.
Mintázat : \b[A-Z]{2}-\d{4}\b
Ahol [A-Z]{2} bármely 2 nagybetűt jelent A-tól Z-ig, \d{4} pedig bármely 4 számjegyet 0-tól 9-ig. A \b szóhatár azt jelzi, hogy egy SKU külön szó, és nem egy nagyobb karakterlánc része.
A minta létrehozásával kezdjen el beírni egy képletet, ahogyan általában szokta, és a függvény neve megjelenik az Excel automatikus kitöltése által javasolt listában:
Feltételezve, hogy az eredeti karakterlánc az A5-ben van, a képlet a következőképpen néz ki:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Az egyszerűség kedvéért a reguláris kifejezést külön cellába is beírhatja, és abszolút hivatkozást ($A$2) használhat a minta Ez biztosítja, hogy a cella címe változatlan marad, amikor a képletet más cellákba másolja:
=RegExpMatch(A5, $A$2)
Ha a TRUE és FALSE helyett saját szöveges címkéket szeretne megjeleníteni, fészkelje be a RegExpMatch-et az IF függvénybe, és adja meg a kívánt szövegeket az IF függvényben. value_if_true és value_if_false érvek:
=IF(RegExpMatch(A5, $A$2), "Igen", "Nem")
További képletpéldákért lásd:
- Hogyan illesszünk össze karakterláncokat reguláris kifejezésekkel
- Excel adatérvényesítés regexekkel
Excel Regex kivonat funkció
A RegExpExtract függvény olyan részláncokat keres, amelyek megfelelnek egy reguláris kifejezésnek, és kivonja az összes egyezést vagy egy adott egyezést.
RegExpExtract(text, pattern, [instance_num], [match_case])Hol:
- Szöveg (kötelező) - a keresendő szöveges karakterlánc.
- Mintázat (kötelező) - az egyezni kívánt reguláris kifejezés.
- Instance_num (opcionális) - egy sorszám, amely jelzi, hogy melyik példányt kell kinyerni. Ha elhagyja, az összes talált egyezést adja vissza (alapértelmezett).
- Match_case (opcionális) - meghatározza, hogy a szöveg nagy- és kisbetűinek megfeleljen-e (TRUE vagy elhagyva) vagy figyelmen kívül hagyja (FALSE).
A függvény kódját itt találja.
Példa: a karakterláncok kivonása reguláris kifejezésekkel
A példánkat egy kicsit tovább folytatva, vegyük ki a számlaszámokat. Ehhez egy nagyon egyszerű regexet fogunk használni, amely bármely 7 számjegyű számmal megegyezik:
Mintázat : \b\d{7}\b
Tegye a mintát A2-be, és ezzel a kompakt és elegáns formulával elvégezheti a munkát:
=RegExpExtract(A5, $A$2)
Ha a minta egyezik, a képlet kivon egy számlaszámot, ha nem talál egyezést, akkor a rendszer nem ad vissza semmit.
További példákért lásd: Hogyan lehet karakterláncokat kivonni az Excelben a regex segítségével.
Excel Regex Replace funkció
A RegExpReplace függvény a regexnek megfelelő értékeket a megadott szöveggel helyettesíti.
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Hol:
- Szöveg (kötelező) - a keresendő szöveges karakterlánc.
- Mintázat (kötelező) - az egyezni kívánt reguláris kifejezés.
- Csere (kötelező) - a szöveg, amellyel a megfelelő részsorokat helyettesíteni kell.
- Instance_num (opcionális) - a cserélendő példány. Az alapértelmezett érték az "összes egyezés".
- Match_case (opcionális) - szabályozza, hogy a szöveg nagy- és kisbetűinek megfeleljen-e (TRUE vagy elhagyva) vagy figyelmen kívül hagyja (FALSE).
A funkció kódja itt érhető el.
Példa: hogyan lehet karakterláncokat helyettesíteni vagy eltávolítani regexek használatával
Néhány nyilvántartásunk hitelkártyaszámokat tartalmaz. Ezek az információk bizalmasak, és lehet, hogy valamivel helyettesíteni szeretné őket, vagy teljesen törölni. Mindkét feladatot a RegExpReplace A második forgatókönyvben egy üres karakterlánccal fogjuk helyettesíteni.
A mintatáblázatunkban az összes kártyaszám 16 számjegyből áll, amelyek 4 csoportban, szóközzel elválasztva vannak leírva. Ezek megtalálásához a mintát megismételjük a következő reguláris kifejezéssel:
Mintázat : \b\d{4} \d{4} \d{4} \d{4} \d{4}\b
A helyettesítéshez a következő karakterláncot használjuk:
Csere : XXXX XXXX XXXX XXXX XXXX XXXX
És itt van egy teljes képlet a cserélje ki a hitelkártyaszámok érzéketlen információkkal:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX XXXX")
Ha a regex és a helyettesítő szöveg külön cellákban (A2 és B2) van, a képlet ugyanolyan jól működik:
Az Excelben az "eltávolítás" a "helyettesítés" egy speciális esete. to távolítsa el a hitelkártya számok, csak egy üres karakterláncot ("") használjon a csere érv:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
Tipp: Az üres sorok eltávolításához az eredményekben használhat egy másik RegExpReplace függvényt, ahogyan az ebben a példában látható: Hogyan távolítsuk el az üres sorokat regex segítségével.
További információkért lásd:
- Hogyan cserélje ki a karakterláncokat az Excelben a regex használatával
- Hogyan távolítsunk el karakterláncokat regex használatával
- Hogyan távolítsuk el a szóközöket regexek használatával?
Regex eszközök a részláncok egyezéséhez, kivonásához, cseréjéhez és eltávolításához
Az Ultimate Suite felhasználóink a reguláris kifejezések minden erejét megkapják anélkül, hogy egyetlen sor kódot is be kellene illeszteniük a munkafüzetükbe. Az összes szükséges kódot fejlesztőink írják, és a telepítés során simán beépítik az Excelbe.
A fentebb tárgyalt VBA függvényekkel ellentétben az Ultimate Suite függvényei .NET alapúak, ami két fő előnnyel jár:
- A szabályos kifejezéseket normál .xlsx munkafüzetekben is használhatja anélkül, hogy VBA-kódot kellene hozzáadnia, és makróként kellene elmentenie őket.
- A .NET Regex motor támogatja a teljes körű klasszikus reguláris kifejezéseket, amelyek segítségével kifinomultabb mintákat is létrehozhat.
Hogyan használjuk a Regexet az Excelben
Az Ultimate Suite telepítésével a reguláris kifejezések használata az Excelben olyan egyszerű, mint ez a két lépés:
- A Ablebits adatok lapon, a Szöveg csoport, kattintson a Regex eszközök .
- A Regex eszközök ablaktáblán a következőket tegye:
- Válassza ki a forrásadatokat.
- Adja meg a regex mintát.
- Válassza ki a kívánt opciót: Match , Kivonat , Távolítsa el a vagy Cserélje ki a címet. .
- Ha az eredményt képletként és nem értékként szeretné megkapni, válassza a Beillesztés képletként jelölőnégyzet.
- Nyomja meg az akció gombot.
Például a hitelkártyaszámok A2:A6 cellákból történő eltávolításához a következő beállításokat kell megadnunk:
Egy pillanat alatt egy AblebitsRegex függvényt illeszt be egy új oszlopba az eredeti adatoktól jobbra. A mi esetünkben a képlet a következő:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")
Ha a képlet már megvan, szerkesztheti, másolhatja vagy áthelyezheti, mint bármely natív képletet.
Regex-képlet beszúrása közvetlenül egy cellába
Az AblebitsRegex függvények közvetlenül is beilleszthetők egy cellába anélkül, hogy a bővítmény felületét használnánk. Íme, hogyan:
- Kattintson a fx gomb a képletsoron vagy Beillesztési funkció a Képletek tab.
- A Beillesztési funkció párbeszédpanelen válassza ki a AblebitsUDFs kategória, válassza ki a kívánt funkciót, és kattintson az OK gombra.
- Adja meg a függvény argumentumait a szokásos módon, és kattintson az OK gombra. Kész!
További információért lásd a Regex Tools for Excel című részt.
Így használhatod a reguláris kifejezéseket az Excel-cellák szövegének megfeleltetésére, kivonására, cseréjére és eltávolítására. Köszönöm, hogy elolvastad, és várom, hogy találkozzunk a blogunkon a jövő héten!
Elérhető letöltések
Excel Regex - képlet példák (.xlsm fájl)
Ultimate Suite - próbaverzió (.exe fájl)