Sisällysluettelo
Etkö koskaan ymmärrä, miksi säännöllisiä lausekkeita ei tueta Excel-kaavoissa? Nyt niitä tuetaan :) Mukautetuilla toiminnoillamme voit helposti etsiä, korvata, poimia ja poistaa tietyn kuvion mukaisia merkkijonoja.
Ensisilmäyksellä Excelissä on kaikki, mitä voit tarvita merkkijonojen käsittelyyn. Entä säännölliset lausekkeet? Excelissä ei ole sisäänrakennettuja Regex-funktioita. Mutta kukaan ei sano, ettemme voisi luoda omia :)
Mikä on säännöllinen lauseke?
Säännöllinen lauseke (eli regex tai regexp ) on erityisesti koodattu merkkijono, joka määrittää hakukuvion. Tämän kuvion avulla voit etsiä merkkijonosta yhteensopivan merkkiyhdistelmän tai validoida syötetyn datan. Jos olet perehtynyt jokerimerkkien merkintätapaan, voit ajatella regexejä jokerimerkkien kehittyneenä versiona.
Säännöllisillä lausekkeilla on oma syntaksinsa, joka koostuu erikoismerkeistä, operaattoreista ja rakenteista. Esimerkiksi [0-5] vastaa mitä tahansa yksittäistä numeroa välillä 0-5.
Säännöllisiä lausekkeita käytetään monissa ohjelmointikielissä, kuten JavaScriptissä ja VBA:ssa. Jälkimmäisessä on erityinen RegExp-olio, jota käytämme mukautettujen funktioiden luomiseen.
Tukeeko Excel regexiä?
Valitettavasti Excelissä ei ole sisäänrakennettuja Regex-toimintoja. Jotta voit käyttää säännöllisiä lausekkeita kaavoissa, sinun on luotava oma käyttäjän määrittelemä toiminto (VBA- tai .NET-pohjainen) tai asennettava kolmannen osapuolen työkalut, jotka tukevat regexejä.
Excel Regex huijauslehti
Riippumatta siitä, onko regex-kuvio hyvin yksinkertainen vai erittäin monimutkainen, se rakennetaan käyttämällä yleistä syntaksia. Tämän ohjeen tarkoituksena ei ole opettaa sinulle säännöllisiä lausekkeita. Tätä varten verkossa on runsaasti resursseja, aloittelijoille suunnatuista ilmaisista ohjeista edistyneille käyttäjille tarkoitettuihin premium-kursseihin.
Alla on pikaohje tärkeimmistä RegEx-malleista, jotka auttavat sinua ymmärtämään perusasiat. Se voi toimia myös huijauslistana, kun opiskelet lisää esimerkkejä.
Jos säännölliset lausekkeet ovat sinulle tuttuja, voit siirtyä suoraan RegExp-funktioihin.
Hahmot
Nämä ovat yleisimmin käytettyjä malleja, jotka vastaavat tiettyjä merkkejä.
Kuvio | Kuvaus | Esimerkki | Ottelut |
. | Jokerimerkki: vastaa mitä tahansa yksittäistä merkkiä paitsi rivinvaihtoa. | .ot | piste , kuuma , potti , @ot |
\d | Numeromerkki: mikä tahansa yksittäinen numero välillä 0-9. | \d | Osoitteessa a1b , tulitikut 1 |
\D | Mikä tahansa merkki, joka EI ole numero | \D | Osoitteessa a1b , tulitikut a ja b |
\s | Välilyönti: välilyönti, tabulaattori, uusi rivi ja kuljetuksen palautusmerkki | .\s. | Osoitteessa 3 senttiä , tulitikut 3 c |
\S | Mikä tahansa muu kuin välilyönti | \S+ | Osoitteessa 30 senttiä , tulitikut 30 ja senttiä |
\w | Sanamerkki: mikä tahansa ASCII-kirjain, numero tai alleviivausmerkki | \w+ | Osoitteessa 5_cats*** , tulitikut 5_kissaa |
\W | Mikä tahansa merkki, joka EI ole aakkosnumeerinen merkki tai alleviivaus. | \W+ | Osoitteessa 5_cats*** , tulitikut *** |
\t | Välilehti | ||
\n | Uusi linja | \n\d+ | Alla olevassa kaksirivisessä merkkijonossa täsmää 10 5 kissaa 10 koiraa |
\ | Vapauttaa merkin erikoismerkityksen, jotta voit etsiä sitä. | \. \w+\. | Välttää pisteen, jotta voit löytää merkkijonosta kirjaimellisen "."-merkin. Mr. , Mrs. , Prof. |
Hahmoluokat
Näiden kuvioiden avulla voit sovittaa yhteen eri merkistöihin kuuluvia elementtejä.
Kuvio | Kuvaus | Esimerkki | Ottelut |
[hahmot] | Sopii mihin tahansa yksittäiseen merkkiin suluissa | d[oi]g | koira ja dig |
[^merkit] | Sopii mihin tahansa yksittäiseen merkkiin, joka EI ole suluissa. | d[^oi]g | Ottelut dag, dug , d1g Ei täsmää koira ja dig |
[from-to] | Sopii mihin tahansa merkkiin sulkujen välissä olevalla alueella. | [0-9] [a-z] [A-Z] | Mikä tahansa yksittäinen numero välillä 0-9 Mikä tahansa yksittäinen pieni kirjain Mikä tahansa yksittäinen iso kirjain |
Kvantifikaattorit
Kvantifikaattorit ovat erikoislausekkeita, jotka määrittelevät täsmäävien merkkien määrän. Kvantifikaattori koskee aina sitä edeltävää merkkiä.
Kuvio | Kuvaus | Esimerkki | Ottelut |
* | Nolla tai useampia esiintymiä | 1a* | 1, 1a , 1aa, 1aaa jne. |
+ | Yksi tai useampi esiintymä | po+ | Osoitteessa potti , tulitikut po Osoitteessa köyhä , tulitikut kakka |
? | Nolla tai yksi esiintymä | roa?d | tie, tanko |
*? | Nolla tai useampia esiintymiä, mutta mahdollisimman vähän. | 1a*? | Osoitteessa 1a , 1aa ja 1aaa , tulitikut 1a |
+? | Yksi tai useampi esiintymä, mutta mahdollisimman vähän. | po+? | Osoitteessa potti ja köyhä , tulitikut po |
?? | Nolla tai yksi esiintymä, mutta mahdollisimman vähän. | roa??? | Osoitteessa tie ja sauva , tulitikut ro |
{n} | Täsmäyttää edellisen kuvion n kertaa | \d{3} | Tasan 3 numeroa |
{n,} | Täyttää edellisen kuvion n tai useamman kerran. | \d{3,} | 3 tai useampia numeroita |
{n,m} | Täsmäyttää edellisen kuvion n ja m välillä. | \d{3,5} | 3-5 numeroa |
Ryhmittely
Ryhmittelyrakenteita käytetään osajonon kaappaamiseen lähdejonosta, jotta voit suorittaa sillä jonkin operaation.
Syntaksi | Kuvaus | Esimerkki | Ottelut |
(kuvio) | Capturing group: kaappaa sopivan osajonon ja antaa sille järjestysnumeron. | (\d+) | Osoitteessa 5 kissaa ja 10 koiraa , vangitsee 5 (ryhmä 1) ja 10 (ryhmä 2) |
(?:pattern) | Ryhmää ei kaapata: vastaa ryhmää, mutta ei kaappaa sitä. | (\d+)(?: koirat) | Osoitteessa 5 kissaa ja 10 koiraa , vangitsee 10 |
\1 | Ryhmän 1 sisältö | (\d+)\+(\d+)=\2\+\1 | Ottelut 5+10=10+5 ja vangitsee 5 ja 10 , jotka ovat kiinniottoryhmissä |
\2 | Ryhmän 2 sisältö |
Ankkurit
Ankkurit määrittelevät syöttömerkkijonon paikan, josta vastaavuutta etsitään.
Ankkuri | Kuvaus | Esimerkki | Ottelut |
^ | Merkkijonon alku Huomautus: [^sulkeiden sisällä] tarkoittaa "ei". | ^\d+ | Mikä tahansa määrä numeroita merkkijonon alussa. Osoitteessa 5 kissaa ja 10 koiraa , tulitikut 5 |
$ | Merkkijonon loppu | \d+$ | Mikä tahansa määrä numeroita merkkijonon lopussa. Osoitteessa 10 plus 5 on 15 , ottelut 15 |
\b | Sanan raja | \bjoy\b | Ottelut ilo erillisenä sanana, mutta ei nautinnollinen . |
\B | EI sanaraja | \Bjoy\B | Ottelut ilo osoitteessa nautinnollinen , mutta ei erillisenä sanana. |
Vuorottelu (OR) -rakenne
Vuorotteluoperaattori aktivoi TAI-logiikan, joten voit yhdistää joko tämän tai tuon elementin.
Rakenna | Kuvaus | Esimerkki | Ottelut |
Sopii mihin tahansa yksittäiseen elementtiin, joka on erotettu pystypalkilla. | (s | Osoitteessa hän myy simpukankuoria, vastaa myy ja kuoret |
Look-arounds
Lookaround-rakenteet ovat hyödyllisiä, kun haluat etsiä jotain sellaista, jota seuraa tai jota ei seuraa tai jota edeltää jokin muu. Näitä lausekkeita kutsutaan joskus "nollaleveysväitteiksi" tai "nollaleveysvastaavuudeksi", koska ne vastaavat pikemminkin paikkaa kuin varsinaisia merkkejä.
Huomautus: VBA RegEx -mallissa lookbehindit eivät ole tuettuja.
Kuvio | Kuvaus | Esimerkki | Ottelut |
(?=) | Positiivinen ennakointi | X(?=Y) | Sopii lausekkeeseen X, kun sitä seuraa Y (eli jos X:n edessä on Y). |
(?!) | Negatiivinen ennakointi | X(?!Y) | Täsmää lausekkeeseen X, jos sitä EI seuraa Y. |
(?<=) | Positiivinen lookbehind | (?<=Y)X | Sopii lausekkeeseen X, kun sitä edeltää Y (eli jos X:n takana on Y). |
(? )</td | Negatiivinen lookbehind | (? Y)X</td | Täsmäyttää lausekkeen X, kun sitä EI edeltää lauseke Y. |
Nyt kun tunnet olennaiset asiat, siirrytään mielenkiintoisimpaan osaan - regexien käyttämiseen todellisessa datassa merkkijonojen jäsentämiseen ja tarvittavien tietojen etsimiseen. Jos tarvitset lisätietoja syntaksista, Microsoftin Regular Expression Language -oppaasta voi olla apua.
Mukautetut RegEx-toiminnot Excelille
Kuten jo mainittiin, Microsoft Excelissä ei ole sisäänrakennettuja RegEx-funktioita. Jotta säännölliset lausekkeet voidaan ottaa käyttöön, olemme luoneet kolme mukautettua VBA-funktiota (eli käyttäjän määrittelemiä funktioita). Voit kopioida koodit alla olevilta sivuilta tai esimerkkityökirjastamme ja liittää ne sitten omiin Excel-tiedostoihisi.
Miten VBA RegExp -funktiot toimivat
Tässä osiossa selitetään sisäinen mekaniikka, ja se voi olla kiinnostava niille, jotka haluavat tietää, mitä tarkalleen ottaen tapahtuu backendissä.
Jotta voit aloittaa säännöllisten lausekkeiden käytön VBA:ssa, sinun on joko aktivoitava RegEx-objektiviitekirjasto tai käytettävä CreateObject-toimintoa. Säästääksemme sinut viitteen asettamiselta VBA-editorissa, valitsimme jälkimmäisen lähestymistavan.
RegExp-objektilla on 4 ominaisuutta:
- Kuvio - on kuvio joka vastaa syötetyn merkkijonon sisältöä.
- Maailmanlaajuinen - valvoo, etsitäänkö syötetyn merkkijonon kaikki vai vain ensimmäinen osuma. Meidän funktiossamme se asetetaan True:ksi, jotta saadaan kaikki ottelut .
- MultiLine - määrittää, etsitäänkö mallia usean rivin merkkijonoissa rivinvaihdon yli vai vain ensimmäisellä rivillä. Koodissamme se on asetettu True:ksi, jotta haetaanko jokaisella rivillä .
- IgnoreCase - määrittelee, onko säännöllinen lauseke case-sensitive (oletusarvo) vai case-insensitive (asetettu True). Meidän tapauksessamme tämä riippuu siitä, miten määrität valinnaisen attribuutin match_case Oletusarvoisesti kaikki toiminnot ovat case-sensitive .
VBA RegExp -rajoitukset
Excel VBA toteuttaa olennaiset regex-mallit, mutta siitä puuttuu monia .NET-, Perl-, Java- ja muiden regex-moottoreiden kehittyneitä ominaisuuksia. Esimerkiksi VBA RegExp ei tue rivin sisällä olevia modifiointimerkkejä, kuten (?i) isojen ja pienten kirjainten erottelemattomaan täsmäytykseen tai (?m) moniriviseen tilaan, lookbehinds, POSIX-luokat, muutamia mainitakseni.
Excel Regex Match -toiminto
The RegExpMatch funktio etsii syöttömerkkijonosta tekstiä, joka vastaa säännöllistä lauseketta, ja palauttaa arvon TRUE, jos vastaavuus löytyy, ja muuten arvon FALSE.
RegExpMatch(text, pattern, [match_case])Missä:
- Teksti (pakollinen) - yksi tai useampi merkkijono, josta haetaan.
- Kuvio (pakollinen) - Säännöllinen lauseke, jota vastataan.
- Match_case (valinnainen) - ottelutyyppi. TRUE tai jätetty pois - isojen ja pienten kirjainten erottelu; FALSE - isojen ja pienten kirjainten erottelu.
Toiminnon koodi on tässä.
Esimerkki: miten säännöllisiä lausekkeita käytetään merkkijonojen täsmäyttämiseen
Oletetaan, että alla olevassa tietokokonaisuudessa halutaan tunnistaa SKU-koodeja sisältävät merkinnät.
Koska jokainen SKU alkaa kahdella isolla kirjaimella, jota seuraa väliviiva ja 4 numeroa, voit verrata niitä seuraavalla lausekkeella.
Kuvio : \b[A-Z]{2}-\d{4}\b
Jossa [A-Z]{2} tarkoittaa kahta isoa kirjainta A:sta Z:hen ja \d{4} tarkoittaa neljää numeroa 0:sta 9:ään. Sananraja \b osoittaa, että SKU on erillinen sana eikä osa suurempaa merkkijonoa.
Kun malli on luotu, aloita kaavan kirjoittaminen normaalisti, ja funktion nimi ilmestyy Excelin AutoComplete-ohjelman ehdottamaan luetteloon:
Jos oletetaan, että alkuperäinen merkkijono on kohdassa A5, kaava on seuraava:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Yksinkertaisuuden vuoksi voit syöttää säännöllisen lausekkeen erilliseen soluun ja käyttää absoluuttista viittausta ($A$2) kenttään. kuvio Näin varmistetaan, että solun osoite säilyy muuttumattomana, kun kopioit kaavan muihin soluihin:
=RegExpMatch(A5, $A$2)
Jos haluat näyttää omat tekstilappusi TRUE:n ja FALSE:n sijasta, sijoita RegExpMatch IF-funktioon ja määritä haluamasi tekstit kenttään value_if_true ja value_if_false argumentit:
=IF(RegExpMatch(A5, $A$2), "Kyllä", "Ei")
Lisää kaavaesimerkkejä löydät osoitteesta:
- Miten sovittaa merkkijonoja säännöllisillä lausekkeilla
- Excelin tietojen validointi regexeillä
Excel Regex Extract -toiminto
The RegExpExtract funktio etsii säännöllisen lausekkeen mukaisia merkkijonoja ja poimii kaikki osumat tai tietyn osuman.
RegExpExtract(text, pattern, [instance_num], [match_case])Missä:
- Teksti (pakollinen) - tekstijono, josta haetaan.
- Kuvio (pakollinen) - Säännöllinen lauseke, jota vastataan.
- Instance_num (valinnainen) - sarjanumero, joka osoittaa, mikä instanssi poimitaan. Jos se jätetään pois, palautetaan kaikki löydetyt osumat (oletusarvo).
- Match_case (valinnainen) - määrittelee, sovitetaanko (TRUE tai jätetään pois) vai jätetäänkö (FALSE) tekstin isot ja pienet kirjaimet huomiotta.
Saat toiminnon koodin täältä.
Esimerkki: merkkijonojen poimiminen säännöllisillä lausekkeilla
Otetaan esimerkkiä hieman pidemmälle ja poimitaan laskujen numerot. Tätä varten käytämme hyvin yksinkertaista regexiä, joka vastaa mitä tahansa 7-numeroista numeroa:
Kuvio : \b\d{7}\b
Laita kuvio A2:een ja saat työn tehtyä tällä kompaktilla ja tyylikkäällä kaavalla:
=RegExpExtract(A5, $A$2)
Jos kuvio täsmää, kaava poimii laskun numeron, jos vastaavuutta ei löydy - mitään ei palauteta.
Lisää esimerkkejä on osoitteessa: Merkkijonojen poimiminen Excelissä regexin avulla.
Excel Regex Korvaa toiminto
The RegExpReplace toiminto korvaa regexin mukaiset arvot määrittelemälläsi tekstillä.
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Missä:
- Teksti (pakollinen) - tekstijono, josta haetaan.
- Kuvio (pakollinen) - Säännöllinen lauseke, jota vastataan.
- Korvaava (pakollinen) - teksti, jolla korvataan vastaavat merkkijonot.
- Instance_num (valinnainen) - korvattava instanssi. Oletusarvo on "kaikki osumat".
- Match_case (valinnainen) - määrittää, sovitetaanko (TRUE tai jätetään pois) vai jätetäänkö (FALSE) huomiotta tekstin isot ja pienet kirjaimet.
Toiminnon koodi on saatavilla täällä.
Esimerkki: merkkijonojen korvaaminen tai poistaminen regexien avulla
Osa tietueistamme sisältää luottokorttinumeroita. Nämä tiedot ovat luottamuksellisia, ja saatat haluta korvata ne jollakin muulla tai poistaa ne kokonaan. Molemmat tehtävät voidaan suorittaa apuna käyttäen RegExpReplace Toisessa skenaariossa korvaamme tyhjällä merkkijonolla.
Esimerkkitaulukossamme kaikissa korttinumeroissa on 16 numeroa, jotka on kirjoitettu neljään ryhmään välilyönneillä erotettuna. Niiden löytämiseksi toistamme kuvion käyttämällä tätä säännöllistä lauseketta:
Kuvio : \b\d{4} \d{4} \d{4} \d{4} \d{4}\b
Korvaamiseen käytetään seuraavaa merkkijonoa:
Korvaava : XXXX XXXX XXXX XXXX XXXX
Ja tässä on täydellinen kaava korvaa luottokorttinumerot, joissa on arkaluonteisia tietoja:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX XXXX")
Kun regex ja korvaava teksti ovat eri soluissa (A2 ja B2), kaava toimii yhtä hyvin:
Excelissä "poistaminen" on erityinen tapaus "korvaamisesta". to poista luottokorttinumerot, käytä tyhjää merkkijonoa ("") kenttään korvaava argumentti:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
Vihje. Jos haluat poistaa tyhjät rivit tuloksista, voit käyttää toista RegExpReplace-funktiota, kuten tässä esimerkissä näytetään: Tyhjien rivien poistaminen regexin avulla.
Lisätietoja on osoitteessa:
- Kuinka korvata merkkijonoja Excelissä regexin avulla
- Miten poistaa merkkijonoja regexin avulla
- Kuinka poistaa välilyönnit regexien avulla?
Regex-työkalut, joilla voit sovittaa, poimia, korvata ja poistaa merkkijonoja.
Ultimate Suite -ohjelmistomme käyttäjät voivat saada kaikki säännöllisten lausekkeiden tehot ilman, että he lisäävät yhtään koodiriviä työkirjoihinsa. Kehittäjämme ovat kirjoittaneet kaiken tarvittavan koodin, ja se integroidaan Exceliin sujuvasti asennuksen aikana.
Toisin kuin edellä käsitellyt VBA-toiminnot, Ultimate Suiten toiminnot ovat .NET-pohjaisia, mikä antaa kaksi pääetua:
- Voit käyttää säännöllisiä lausekkeita tavallisissa .xlsx-työkirjoissa lisäämättä VBA-koodia ja tallentamatta niitä makrotoiminnoilla varustetuiksi tiedostoiksi.
- .NET Regex -moottori tukee täydellisiä klassisia säännöllisiä lausekkeita, joiden avulla voit rakentaa kehittyneempiä kuvioita.
Regexin käyttö Excelissä
Kun Ultimate Suite on asennettu, säännöllisten lausekkeiden käyttäminen Excelissä on yhtä helppoa kuin nämä kaksi vaihetta:
- On Ablebits Data välilehdellä, kohdassa Teksti ryhmää, napsauta Regex-työkalut .
- On Regex-työkalut ruudussa seuraavasti:
- Valitse lähdetiedot.
- Kirjoita regex-kuvio.
- Valitse haluamasi vaihtoehto: Ottelu , Ote , Poista tai Vaihda .
- Jos haluat saada tuloksen kaavana eikä arvona, valitse vaihtoehto Lisää kaavana valintaruutu.
- Paina toimintapainiketta.
Jos esimerkiksi haluamme poistaa luottokorttinumerot soluista A2:A6, määrittelemme nämä asetukset:
AblebitsRegex-funktio lisätään hetkessä uuteen sarakkeeseen alkuperäisten tietojen oikealle puolelle. Meidän tapauksessamme kaava on:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")
Kun kaava on olemassa, voit muokata, kopioida tai siirtää sitä kuten mitä tahansa alkuperäistä kaavaa.
Regex-kaavan lisääminen suoraan soluun
AblebitsRegex-funktiot voidaan myös lisätä suoraan soluun ilman lisäosan käyttöliittymää. Näin:
- Napsauta fx painiketta kaavapalkissa tai Lisää toiminto on Kaavat välilehti.
- Vuonna Lisää toiminto valintaikkunassa, valitse AblebitsUDFs luokka, valitse haluamasi toiminto ja napsauta OK.
- Määritä funktion argumentit kuten tavallisesti ja napsauta OK. Valmis!
Lisätietoja on kohdassa Regex Tools for Excel.
Näin käytät säännöllisiä lausekkeita Excelin solujen tekstin täsmäyttämiseen, poimimiseen, korvaamiseen ja poistamiseen. Kiitän sinua lukemisesta ja odotan innolla, että tapaamme blogissamme ensi viikolla!
Saatavilla olevat lataukset
Excel Regex - kaavaesimerkkejä (.xlsm-tiedosto)
Ultimate Suite - kokeiluversio (.exe-tiedosto)