Innholdsfortegnelse
Kan aldri forstå hvorfor regulære uttrykk ikke støttes i Excel-formler? Nå er de det :) Med våre egendefinerte funksjoner kan du enkelt finne, erstatte, trekke ut og fjerne strenger som matcher et spesifikt mønster.
Ved første øyekast har Excel alt du trenger for tekststrenger. manipulasjoner. Hmm... hva med regulære uttrykk? Oops, det er ingen innebygde Regex-funksjoner i Excel. Men ingen sier at vi ikke kan lage våre egne :)
Hva er regulært uttrykk?
Et regulært uttrykk (aka regex eller regexp ) er en spesielt kodet sekvens av tegn som definerer et søkemønster. Ved å bruke det mønsteret kan du finne en matchende tegnkombinasjon i en streng eller validere datainndata. Hvis du er kjent med jokertegn, kan du tenke på regexes som en avansert versjon av jokertegn.
Regulære uttrykk har sin egen syntaks som består av spesialtegn, operatorer og konstruksjoner. For eksempel samsvarer [0-5] med et enkelt siffer fra 0 til 5.
Regulære uttrykk brukes i mange programmeringsspråk, inkludert JavaScript og VBA. Sistnevnte har et spesielt RegExp-objekt, som vi vil bruke til å lage våre egendefinerte funksjoner.
Støtter Excel regex?
Dessverre er det ingen innebygde Regex-funksjoner i Excel. For å kunne bruke regulære uttrykk i formlene dine, må du lage din egen brukerdefinerte funksjon (VBAargumenter:
=IF(RegExpMatch(A5, $A$2), "Yes", "No")
For flere formeleksempler, se:
- Hvordan matche strenger ved hjelp av regulære uttrykk
- Excel-datavalidering med regexes
Excel Regex Extract-funksjonen
RegExpExtract -funksjonen søker etter delstrenger som samsvarer med et regulært uttrykk og trekker ut alle samsvar eller spesifikt samsvar.
RegExpExtract(tekst, mønster, [forekomstnummer], [tilfellesak])Hvor:
- Tekst (obligatorisk) – tekststrengen for å søke in.
- Mønster (obligatorisk) - det regulære uttrykket som skal samsvare.
- Forekomstnummer (valgfritt) - et serienummer som indikerer hvilken forekomst som skal ekstrakt. Hvis utelatt, returnerer alle funnet treff (standard).
- Samsvar_forbokstav (valgfritt) - definerer om det skal samsvare (SANN eller utelatt) eller ignorere (USANN) store og små bokstaver i tekst.
Du kan få koden til funksjonen her.
Eksempel: hvordan trekke ut strenger ved hjelp av regulære uttrykk
Vi tar eksemplet litt lenger, la oss trekke ut fakturanumre. For dette vil vi bruke et veldig enkelt regulært uttrykk som samsvarer med et hvilket som helst 7-sifret tall:
Mønster : \b\d{7}\b
Put mønsteret i A2, og du får jobben gjort med denne kompakte og elegante formelen:
=RegExpExtract(A5, $A$2)
Hvis et mønster matches, trekker formelen ut et fakturanummer, hvis ingen treff blir funnet - ingenting returneres.
For flere eksempler, se: Hvordan trekke ut strenger i Excelbruker regex.
Excel Regex Replace-funksjonen
RegExpReplace -funksjonen erstatter verdiene som samsvarer med et regulært uttrykk med teksten du spesifiserer.
RegExpReplace(tekst, mønster, erstatning , [instance_num], [match_case])Hvor:
- Tekst (obligatorisk) – tekststrengen for å søke i.
- Mønster (obligatorisk) - det regulære uttrykket som skal samsvare.
- Erstatning (påkrevd) - teksten som skal erstatte de samsvarende understrengene med.
- Forekomstnummer (valgfritt) - forekomsten som skal erstattes. Standard er "alle treff".
- Samsvar (valgfritt) - kontrollerer om det skal samsvare (SANN eller utelatt) eller ignorere (USANN) store og små bokstaver.
Koden til funksjonen er tilgjengelig her.
Eksempel: hvordan erstatte eller fjerne strenger ved hjelp av regexes
Noen av våre poster inneholder kredittkortnumre. Denne informasjonen er konfidensiell, og du vil kanskje erstatte den med noe eller slette den helt. Begge oppgavene kan utføres ved hjelp av RegExpReplace -funksjonen. Hvordan? I et annet scenario vil vi erstatte med en tom streng.
I eksempeltabellen vår har alle kortnumre 16 sifre, som er skrevet i 4 grupper atskilt med mellomrom. For å finne dem replikerer vi mønsteret ved å bruke dette regulære uttrykket:
Mønster : \b\d{4} \d{4} \d{4} \d{4}\ b
For erstatning brukes følgende streng:
Erstatning : XXXX XXXX XXXXXXXX
Og her er en fullstendig formel for å erstatte kredittkortnumre med usensitiv informasjon:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")
Med regex og erstatningstekst i separate celler ( A2 og B2), fungerer formelen like bra:
I Excel er "fjerning" et spesielt tilfelle av "erstatte". For å fjerne kredittkortnumre, bruk bare en tom streng ("") for argumentet erstatting :
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
Tips. For å få rigg av tomme linjer i resultatene, kan du bruke en annen RegExpReplace-funksjon som vist i dette eksemplet: Hvordan fjerne tomme linjer ved hjelp av regex.
For mer informasjon, se:
- Hvordan erstatte strenger i Excel ved hjelp av regex
- Hvordan fjerne strenger ved hjelp av regulært uttrykk
- Hvordan fjerne mellomrom ved bruk av regex
Regex-verktøy for å matche, trekke ut , erstatt og fjern understrenger
Brukerne av Ultimate Suite kan få all kraften til regulære uttrykk uten å sette inn en eneste kodelinje i arbeidsbøkene sine. All nødvendig kode er skrevet av våre utviklere og jevnt integrert i Excel under installasjonen.
I motsetning til VBA-funksjonene som er omtalt ovenfor, er Ultimate Suite-funksjonene .NET-baserte, noe som gir to hovedfordeler:
- Du kan bruke regulære uttrykk i vanlige .xlsx-arbeidsbøker uten å legge til VBA-kode og måtte lagre dem som makroaktiverte filer.
- .NET Regex-motoren støtter klassiske funksjoner med alle funksjonerregulære uttrykk, som lar deg konstruere mer sofistikerte mønstre.
Hvordan bruke Regex i Excel
Med Ultimate Suite installert er det like enkelt å bruke regulære uttrykk i Excel som disse to trinnene :
- I kategorien Ablebits Data , i Tekst -gruppen, klikk Regex Tools .
- Gjør følgende i ruten Regex Tools :
- Velg kildedata.
- Skriv inn ditt regex-mønster.
- Velg ønsket alternativ: Samsvar , Pakk ut , Fjern eller Erstatt .
- For å få resultatet som formel og ikke verdi, merk av for Sett inn som formel .
- Trykk på handlingsknappen.
For å fjerne for eksempel kredittkortnumre fra celler A2:A6, vi konfigurerer disse innstillingene:
På en gang vil en AblebitsRegex-funksjon bli satt inn i en ny kolonne til høyre for originalen data. I vårt tilfelle er formelen:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")
Når formelen er der, kan du redigere, kopiere eller flytte den som en hvilken som helst naturlig formel.
Hvordan sette inn en Regex-formel direkte i en celle
AblebitsRegex-funksjonene kan også settes inn direkte i en celle uten å bruke tilleggets grensesnitt. Slik gjør du det:
- Klikk fx -knappen på formellinjen eller Sett inn funksjon på Formler -fanen.
- I dialogboksen Sett inn funksjon velger du AblebitsUDFs kategori, velg funksjonen av interesse, og klikk OK.
- Definer funksjonens argumenter som du vanligvis gjør, og klikk OK. Ferdig!
For mer informasjon, se Regex-verktøy for Excel.
Slik bruker du regulære uttrykk for å matche, trekke ut, erstatte og fjerne tekst i Excel-celler. Jeg takker for at du leser og ser frem til å se deg på bloggen vår neste uke!
Tilgjengelige nedlastinger
Excel Regex - formeleksempler (.xlsm-fil)
Ultimate Suite - prøveversjon (.exe-fil)
eller .NET-basert) eller installer tredjepartsverktøy som støtter regex.Excel Regex-jukseark
Enten et regex-mønster er veldig enkelt eller ekstremt sofistikert, er det bygget ved hjelp av den vanlige syntaksen. Denne opplæringen har ikke som mål å lære deg regulære uttrykk. For dette er det mange ressurser på nettet, fra gratis veiledninger for nybegynnere til premium-kurs for avanserte brukere.
Nedenfor gir vi en rask referanse til de viktigste RegEx-mønstrene som vil hjelpe deg å få et grep om det grunnleggende. Det kan også fungere som jukseark når du studerer ytterligere eksempler.
Hvis du er komfortabel med regulære uttrykk, kan du hoppe rett til RegExp-funksjonene.
Tegn
Disse er de mest brukte mønstrene for å matche visse tegn.
Mønster | Beskrivelse | Eksempel | Samsvar |
. | Jokertegn: samsvarer med et enkelt tegn unntatt et linjeskift | .ot | dot , hot , pot , @ot |
\d | Siffertegn: ethvert enkeltsiffer fra 0 til 9 | \d | I a1b , samsvarer med 1 |
\D | Alle tegn som IKKE er et siffer | \D | I a1b , samsvarer med a og b |
\s | Mellomrom: mellomrom, tabulator, ny linje og vognretur | .\s. | I 3 cent , samsvarer med 3 c |
\S | Alleikke-mellomrom | \S+ | I 30 cent , samsvarer med 30 og cent |
\w | Ordtegn: enhver ASCII-bokstav, siffer eller understrek | \w+ | I 5_cats*** , samsvarer med 5_katter |
\W | Alle tegn som IKKE er et alfanumerisk tegn eller understrek | \W+ | I 5_cats*** , samsvarer med *** |
\t | Tab | ||
\n | Ny linje | \n\d+ | I to-linjen streng nedenfor, samsvarer med 10 5 katter 10 hunder |
\ | Unngår spesiell betydning av en karakter, slik at du kan søk etter det | \. \w+\. | Escapes et punktum slik at du kan finne den bokstavelige "." tegn i en streng Mr. , Fru , Prof. |
Tegnklasser
Ved å bruke disse mønstrene kan du matche elementer i forskjellige tegnsett.
Mønster | Beskrivelse | Eksempel | Samsvarer |
[tegn] | Samsvarer med et enkelt tegn i parentes | d[oi]g | hund og dig |
[^tegn] | Samsvarer med et enkelt tegn IKKE i parentes | d[^oi]g | Samsvarer dag, dug , d1g Samsvarer ikke med hund og dig |
[fra–til] | Samsvarer med et hvilket som helst tegn i området mellomparentes | [0-9] [a-z] [A-Z] | Hvilket enkelt siffer fra 0 til 9 Enhver enkelt liten bokstav Enhver enkelt stor bokstav |
Quantifiers
Quantifiers er spesielle uttrykk som spesifiserer antall tegn som skal samsvare. En kvantifiserer gjelder alltid tegnet foran det.
Mønster | Beskrivelse | Eksempel | Samsvar |
* | Null eller flere forekomster | 1a* | 1, 1a , 1aa, 1aaa osv. |
+ | En eller flere forekomster | po+ | I pott , matcher po I dårlig , samsvarer med poo |
? | Null eller én forekomst | roa?d | vei, stang |
*? | Null eller flere forekomster, men så færre som mulig | 1a*? | I 1a , 1aa og 1aaa , samsvarer 1a |
+? | En eller flere forekomster, men så færre som mulig | po+? | I pott og dårlig , samsvarer med po |
?? | Null eller én forekomst , men så færre som mulig | roa?? | I vei og stang , samsvarer med ro |
{n} | Samsvarer med det foregående mønsteret n ganger | \d{3} | Nøyaktig 3 sifre |
{n ,} | Samsvarer med det foregående mønsteret n eller flere ganger | \d{3,} | 3 eller flere sifre |
{n,m} | Samsvarer medforegående mønster mellom n og m ganger | \d{3,5} | Fra 3 til 5 sifre |
Gruppering
Grupperingskonstruksjoner brukes til å fange opp en delstreng fra kildestrengen, slik at du kan utføre en operasjon med den.
Syntaks | Beskrivelse | Eksempel | Samsvar |
(mønster) | Fangstgruppe: fanger opp en samsvarende delstreng og tildeler den et ordinært tall | (\d+) | I 5 katter og 10 hunder , fanger 5 (gruppe 1) og 10 (gruppe 2) |
(?:mønster) | Ikke-fangstgruppe: samsvarer med en gruppe, men fanger den ikke | (\d+)(?: hunder) | I 5 katter og 10 hunder , fanger 10 |
\1 | Innhold i gruppen 1 | (\d+)\+(\d+)=\2\+\1 | Samsvarer 5+10=10+5 og fanger 5 og 10 , som er i fangstgrupper |
\2 | Innhold i gruppe 2 |
Ankere
Ankere spesifiserer en posisjon i inndatastrengen hvor de skal se etter en kamp.
Anker | Beskrivelse | Eksempel | Samsvar |
^ | Start av streng Merk: [^inside parentes] betyr "ikke" | ^\d+ | Et hvilket som helst antall sifre ved start av strengen. I 5 katter og 10 hunder , samsvarer med 5 |
$ | Slutt på streng | \d+$ | Vel som helst antall sifre på slutten av strengen. I 10Y |
(?<=) | Positivt blikk bak | (?<=Y)X | Samsvarer med uttrykk X når det er innledet med Y (dvs. hvis det er Y bak X) |
(? | Negativ lookbehind | (? | Samsvarer med uttrykk X når det IKKE er innledet med Y |
Nå som du vet det viktigste, la oss gå videre til den mest interessante delen - ved å bruke regexes på ekte data for å analysere strenger og finne den nødvendige informasjonen. Hvis du trenger mer informasjon om syntaksen, kan Microsoft-veiledningen for Regular Expression Language være nyttig.
Egendefinerte RegEx-funksjoner for Excel
Som allerede nevnt har Microsoft Excel ingen innebygde RegEx-funksjoner. For å aktivere regulære uttrykk har vi laget tre egendefinerte VBA-funksjoner (aka brukerdefinerte funksjoner). Du kan kopiere kodene fra sidene nedenfor eller fra eksempelet vårt. arbeidsbok, og lim deretter inn dine egne Excel-filer.
Hvordan VBA RegExp-funksjoner fungerer
Denne delen forklarer den indre mekanikken og kan være int. eresting til de som vil vite nøyaktig hva som skjer i backend.
For å begynne å bruke regulære uttrykk i VBA, må du enten aktivere RegEx-objektreferansebiblioteket eller bruke CreateObject-funksjonen. For å spare deg for bryet med å sette referansen i VBA-editoren, valgte vi den siste tilnærmingen.
RegExp-objektet har 4 egenskaper:
- Mønster - er den mønster for å matche i inndatastrengen.
- Global - kontrollerer om det skal finne alle treff i inndatastrengen eller bare den første. I våre funksjoner er den satt til True for å få alle treff .
- MultiLine - bestemmer om mønsteret skal samsvare på tvers av linjeskift i flerlinjede strenger eller bare i første linje. I våre koder er det satt til True for å søke på hver linje .
- IgnoreCase - definerer om et regulært uttrykk er sensitivt for store og små bokstaver (standard) eller store og små bokstaver. ufølsom (sett til True). I vårt tilfelle avhenger det av hvordan du konfigurerer den valgfrie parameteren match_case . Som standard er alle funksjonene skiftende bokstaver .
VBA RegExp-begrensninger
Excel VBA implementerer de essensielle regex-mønstrene, men den mangler mange avanserte funksjoner tilgjengelig i .NET, Perl, Java og andre regex-motorer. VBA RegExp støtter for eksempel ikke innebygde modifikatorer som (?i) for samsvaring uten store og små bokstaver eller (?m) for flerlinjemodus, lookbehinds, POSIX-klasser, for å nevne noen.
Excel Regex Samsvarsfunksjon
RegExpMatch -funksjonen søker i en inndatastreng etter tekst som samsvarer med et regulært uttrykk og returnerer TRUE hvis et samsvar blir funnet, FALSE ellers.
RegExpMatch(tekst, mønster, [ match_case])Hvor:
- Tekst (obligatorisk) – én eller flere strenger å søke i.
- Mønster ( nødvendig) - den vanligeuttrykk som skal samsvare.
- Samsvarsstilfelle (valgfritt) – samsvarstype. TRUE eller utelatt – skiller mellom store og små bokstaver; FALSE - skiller mellom store og små bokstaver
Funksjonens kode er her.
Eksempel: hvordan bruke regulære uttrykk for å matche strenger
I datasettet nedenfor, anta at du vil for å identifisere oppføringene som inneholder SKU-koder.
Gi at hver SKU starter med 2 store bokstaver, etterfulgt av en bindestrek, etterfulgt av 4 sifre, kan du matche dem ved å bruke følgende uttrykk.
Mønster : \b[A-Z]{2}-\d{4}\b
Hvor [A-Z]{2} betyr 2 store bokstaver fra A til Å og \d{4 } betyr alle fire sifre fra 0 til 9. En ordgrense \b indikerer at en SKU er et separat ord og ikke en del av en større streng.
Med mønsteret etablert, begynn å skrive en formel som du vanligvis gjør , og funksjonens navn vil vises i listen foreslått av Excels Autofullfør:
Forutsatt at den opprinnelige strengen er i A5, går formelen som følger:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
For enkelhets skyld kan du legge inn det regulære uttrykket i en separat celle og bruke en absolutt referanse ($A$2) for mønsteret -argumenet t. Dette sikrer at celleadressen forblir uendret når du kopierer formelen til andre celler:
=RegExpMatch(A5, $A$2)
For å vise dine egne tekstetiketter i stedet for TRUE og FALSE, sett inn RegExpMatch i HVIS-funksjonen og spesifiser de ønskede tekstene i verdi_hvis_sann og verdi_hvis_falsk pluss 5 gir 15 , samsvarer med 15
Alternasjon (OR) konstruksjon
Alternasjonsoperanden aktiverer OR-logikken, slik at du kan matche enten dette eller det elementet.
Konstrukt | Beskrivelse | Eksempel | Samsvar |