Indholdsfortegnelse
Du har aldrig forstået, hvorfor regulære udtryk ikke er understøttet i Excel-formler, men det er de nu :) Med vores brugerdefinerede funktioner kan du nemt finde, erstatte, udtrække og fjerne strenge, der matcher et bestemt mønster.
Ved første øjekast har Excel alt, hvad du kan få brug for til at manipulere tekststrenge. Hmm... hvad med regulære udtryk? Ups, der er ingen indbyggede Regex-funktioner i Excel. Men der er ingen, der siger, at vi ikke kan lave vores egne :)
Hvad er regulære udtryk?
Et regulært udtryk (også kendt som regex eller regexp ) er en specielt kodet sekvens af tegn, der definerer et søgemønster. Ved hjælp af dette mønster kan du finde en matchende tegnkombination i en streng eller validere dataindtastning. Hvis du er bekendt med en jokertegnsnotation, kan du betragte regexer som en avanceret version af jokertegn.
Regulære udtryk har deres egen syntaks bestående af specialtegn, operatorer og konstruktioner. F.eks. passer [0-5] til ethvert enkelt ciffer fra 0 til 5.
Regulære udtryk bruges i mange programmeringssprog, herunder JavaScript og VBA. Sidstnævnte har et særligt RegExp-objekt, som vi skal bruge til at oprette vores brugerdefinerede funktioner.
Understøtter Excel regex?
Der er desværre ingen indbyggede Regex-funktioner i Excel. For at kunne bruge regulære udtryk i dine formler skal du oprette din egen brugerdefinerede funktion (VBA- eller .NET-baseret) eller installere værktøjer fra tredjeparter, der understøtter regexer.
Excel Regex snydeark
Uanset om et regex-mønster er meget simpelt eller ekstremt sofistikeret, er det opbygget ved hjælp af den almindelige syntaks. Denne vejledning har ikke til formål at lære dig regulære udtryk. Der findes masser af ressourcer online, lige fra gratis vejledninger for begyndere til premium-kurser for avancerede brugere.
Nedenfor giver vi en hurtig reference til de vigtigste RegEx-mønstre, som vil hjælpe dig med at få styr på det grundlæggende. Den kan også fungere som et snydeark, når du studerer yderligere eksempler.
Hvis du er fortrolig med regulære udtryk, kan du gå direkte til RegExp-funktionerne.
Karakterer
Dette er de mest anvendte mønstre til at matche bestemte tegn.
Mønster | Beskrivelse | Eksempel | Matcher |
. | Jokertegn: passer til ethvert enkelt tegn undtagen et linjeskift | .ot | punkt , hot , gryde , @ot |
\d | Ciffertegn: ethvert enkelt ciffer fra 0 til 9 | \d | På a1b , tændstikker 1 |
\D | Ethvert tegn, der IKKE er et ciffer | \D | På a1b , tændstikker a og b |
\s | Hvidt mellemrum: mellemrum, tabulator, ny linje og vogn tilbage | .\s. | På 3 cents , tændstikker 3 c |
\S | Ethvert tegn, der ikke er et mellemrum | \S+ | På 30 cents , tændstikker 30 og cents |
\w | Ordtegn: ethvert ASCII-bogstav, ciffer eller understregning | \w+ | På 5_cats*** , tændstikker 5_katte |
\W | Ethvert tegn, der IKKE er et alfanumerisk tegn eller en understregning | \W+ | På 5_cats*** , tændstikker *** |
\t | Fanen | ||
\n | Ny linje | \n\d+ | I den to-linjede streng nedenfor, matcher 10 5 katte 10 hunde |
\ | Undgår den særlige betydning af et tegn, så du kan søge efter det | \. \w+\. | Undgår et punktum, så du kan finde det bogstavelige "."-tegn i en streng Hr. , Fru. , Prof. |
Karakterklasser
Ved hjælp af disse mønstre kan du matche elementer i forskellige tegnsæt.
Mønster | Beskrivelse | Eksempel | Matcher |
[tegn] | Matcher ethvert enkelt tegn i parenteserne | d[oi]g | hund og grave |
[^tegn] | Matcher ethvert enkelt tegn, der IKKE er i parenteserne | d[^oi]g | Matcher dag, dug , d1g Passer ikke hund og grave |
[fra-til] | Matcher ethvert tegn i området mellem parenteserne | [0-9] [a-z] [A-Z] | Et vilkårligt enkelt ciffer fra 0 til 9 Ethvert enkelt lille bogstav Ethvert enkelt stort bogstav |
Kvotienter
Kvantifikatorer er specielle udtryk, der angiver antallet af tegn, der skal matches. En kvantifikator gælder altid for det tegn, der står før den.
Mønster | Beskrivelse | Eksempel | Matcher |
* | Nul eller flere forekomster | 1a* | 1, 1a , 1aa, 1aaa , osv. |
+ | En eller flere forekomster | po+ | På gryde , tændstikker po På stakkels , tændstikker bæ |
? | Nul eller én forekomst | roa?d | vej, stang |
*? | Nul eller flere forekomster, men så få som muligt | 1a*? | På 1a , 1aa og 1aaa , tændstikker 1a |
+? | En eller flere forekomster, men så få som muligt | po+? | På gryde og stakkels , tændstikker po |
?? | Nul eller én forekomst, men så få som muligt | roa??? | På vej og stang , tændstikker ro |
{n} | Matcher det foregående mønster n gange | \d{3} | Præcis 3 cifre |
{n,} | Matcher det foregående mønster n eller flere gange | \d{3,} | 3 eller flere cifre |
{n,m} | Matcher det foregående mønster mellem n og m gange | \d{3,5} | Fra 3 til 5 cifre |
Gruppering
Grupperingskonstruktioner bruges til at fange en delstreng fra kildestrengen, så du kan udføre en operation med den.
Syntaks | Beskrivelse | Eksempel | Matcher |
(mønster) | Fangstgruppe: fanger en matchende delstreng og tildeler den et ordinalnummer | (\d+) | På 5 katte og 10 hunde , indfangninger 5 (gruppe 1) og 10 (gruppe 2) |
(?:mønster) | Ikke-opsamlende gruppe: svarer til en gruppe, men opsamler den ikke | (\d+)(?: hunde) | På 5 katte og 10 hunde , indfangninger 10 |
\1 | Indhold i gruppe 1 | (\d+)\+(\d+)=\2\+\1 | Matcher 5+10=10+5 og fanger 5 og 10 , som er i fanggrupper |
\2 | Indhold i gruppe 2 |
Ankre
Ankre angiver en position i inputstrengen, hvor der skal søges efter et match.
Anker | Beskrivelse | Eksempel | Matcher |
^ | Start af streng Bemærk: [^inden for parentes] betyder "ikke" | ^\d+ | Et vilkårligt antal cifre i starten af strengen. På 5 katte og 10 hunde , tændstikker 5 |
$ | Slutning af streng | \d+$ | Et vilkårligt antal cifre i slutningen af strengen. På 10 plus 5 giver 15 , kampe 15 |
\b | Ordgrænse | \bjoy\b | Matcher joy som et særskilt ord, men ikke i fornøjelig . |
\B | IKKE en ordgrænse | \Bjoy\B | Matcher joy på fornøjelig , men ikke som et selvstændigt ord. |
Alternation (OR)-konstrukt
Operanden alternation aktiverer OR-logikken, så du kan matche enten dette eller hint element.
Konstruere | Beskrivelse | Eksempel | Matcher |
Passer til ethvert enkelt element adskilt af den lodrette streg | (s | På hun sælger muslingeskaller, matcher sælger og skaller |
Se-omgange
Lookaround-konstruktioner er nyttige, når du ønsker at matche noget, der er eller ikke er efterfulgt eller forudgået af noget andet. Disse udtryk kaldes nogle gange "zero-width assertions" eller "zero-width match", fordi de matcher en position i stedet for faktiske tegn.
Bemærk. I VBA RegEx-stilen understøttes lookbehinds ikke.
Mønster | Beskrivelse | Eksempel | Matcher |
(?=) | Positivt lookahead | X(?=Y) | Matcher udtryk X, når det efterfølges af Y (dvs. hvis der er Y foran X) |
(?!) | Negativ lookahead | X(?!Y) | Matcher udtryk X, hvis det IKKE er efterfulgt af Y |
(?<=) | Positivt kig bagud | (?<=Y)X | Matcher udtryk X, når der står Y foran det (dvs. hvis der står Y bag X) |
(? )</td | Negativt kig bagud | (? Y)X</td | Matcher udtryk X, når det IKKE indledes med Y |
Nu, hvor du kender det vigtigste, kan vi gå videre til den mest interessante del - at bruge regexes på rigtige data til at analysere strenge og finde de nødvendige oplysninger. Hvis du har brug for flere oplysninger om syntaksen, kan Microsoft-guiden om Regular Expression Language være nyttig.
Brugerdefinerede RegEx-funktioner til Excel
Som allerede nævnt har Microsoft Excel ingen indbyggede RegEx-funktioner. For at aktivere regulære udtryk har vi oprettet tre brugerdefinerede VBA-funktioner (også kaldet brugerdefinerede funktioner). Du kan kopiere koderne fra de sider, der er linket til nedenfor, eller fra vores eksempelarbejdsmappe og derefter indsætte dem i dine egne Excel-filer.
Sådan fungerer VBA RegExp-funktioner
Dette afsnit forklarer den indre mekanik og kan være interessant for dem, der ønsker at vide præcis, hvad der sker i backend.
Hvis du vil begynde at bruge regulære udtryk i VBA, skal du enten aktivere RegEx-objektreferencebiblioteket eller bruge funktionen CreateObject. For at spare dig besværet med at indstille referencen i VBA-editoren valgte vi sidstnævnte fremgangsmåde.
RegExp-objektet har 4 egenskaber:
- Mønster - er den mønster der skal matches i indtastningsstrengen.
- Global - styrer, om der skal findes alle match i indtastningsstrengen eller kun det første. I vores funktioner er den sat til True for at få alle kampe .
- MultiLine - bestemmer, om mønsteret skal matches på tværs af linjeskift i strenge med flere linjer eller kun i den første linje. I vores koder er den sat til True for at søge i hver linje .
- IgnoreCase - definerer, om et regulært udtryk er case-sensitive (standard) eller case-insensitive (indstillet til True). I vores tilfælde afhænger det af, hvordan du konfigurerer den valgfrie match_case Som standard er alle funktioner skraldefølsom .
VBA RegExp-begrænsninger
Excel VBA implementerer de vigtigste regex-mønstre, men det mangler mange avancerede funktioner, der er tilgængelige i .NET, Perl, Java og andre regex-maskiner. VBA RegExp understøtter f.eks. ikke inline-modifikatorer som (?i) til at skelne mellem store og små bogstaver eller (?m) til flere linjer, lookbehinds, POSIX-klasser, for blot at nævne nogle få.
Excel Regex Match-funktion
RegExpMatch funktionen søger i en indtastningsstreng efter tekst, der passer til et regulært udtryk og returnerer TRUE, hvis der findes et match, og FALSE i modsat fald.
RegExpMatch(text, pattern, [match_case])Hvor:
- Tekst (påkrævet) - en eller flere strenge, der skal søges i.
- Mønster (påkrævet) - det regulære udtryk, der skal matches.
- Match_case (valgfrit) - match type. TRUE eller udeladt - case-sensitive; FALSE - case-insensitive
Koden til funktionen findes her.
Eksempel: hvordan du bruger regulære udtryk til at matche strenge
Antag, at du i nedenstående datasæt ønsker at identificere de poster, der indeholder SKU-koder.
Da hver SKU begynder med 2 store bogstaver, efterfulgt af en bindestreg og 4 cifre, kan du matche dem ved hjælp af følgende udtryk.
Mønster : \b[A-Z]{2}-\d{4}\b
Hvor [A-Z]{2} betyder 2 store bogstaver fra A til Z, og \d{4} betyder 4 cifre fra 0 til 9. En ordgrænse \b angiver, at en SKU er et separat ord og ikke en del af en større streng.
Når mønsteret er etableret, kan du begynde at skrive en formel, som du plejer, og funktionens navn vil blive vist på listen, som Excel's AutoComplete foreslår:
Hvis vi antager, at den oprindelige streng er i A5, lyder formlen således:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
For nemheds skyld kan du indtaste det regulære udtryk i en separat celle og bruge en absolut reference ($A$2) for mønster Dette sikrer, at celleadressen forbliver uændret, når du kopierer formlen til andre celler:
=RegExpMatch(A5, $A$2)
Hvis du vil vise dine egne tekstmærker i stedet for TRUE og FALSE, skal du integrere RegExpMatch i IF-funktionen og angive de ønskede tekster i value_if_true og value_if_false argumenter:
=IF(RegExpMatch(A5, $A$2), "Ja", "Nej")
For flere eksempler på formler, se venligst:
- Hvordan man matcher strenge ved hjælp af regulære udtryk
- Excel-datavalidering med regexes
Excel Regex Uddrag funktion
RegExpExtract funktionen søger efter understrenge, der passer til et regulært udtryk, og udtrækker alle eller et bestemt match.
RegExpExtract(text, pattern, [instance_num], [match_case])Hvor:
- Tekst (påkrævet) - den tekststreng, der skal søges i.
- Mønster (påkrævet) - det regulære udtryk, der skal matches.
- Instance_num (valgfrit) - et løbenummer, der angiver, hvilken instans der skal udtrækkes. Hvis udeladt, returneres alle fundne match (standard).
- Match_case (valgfrit) - angiver, om der skal matches (TRUE eller udeladt) eller ignoreres (FALSK) mellemrum i teksten.
Du kan få koden til funktionen her.
Eksempel: hvordan man uddrager strenge ved hjælp af regulære udtryk
Lad os gå lidt videre med vores eksempel og udtrække fakturanumre. Hertil bruger vi et meget simpelt regex, der matcher ethvert 7-cifret tal:
Mønster : \b\d{7}\b
Sæt mønsteret i A2, og du får arbejdet gjort med denne kompakte og elegante formel:
=RegExpExtract(A5, $A$2)
Hvis der findes et mønster, uddrager formlen et fakturanummer, og hvis der ikke findes et mønster, returneres der intet.
Du kan finde flere eksempler i: Sådan udtrækkes strenge i Excel ved hjælp af regex.
Excel Regex erstatte funktion
RegExpReplace funktionen erstatter de værdier, der matcher en regex, med den tekst, du angiver.
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Hvor:
- Tekst (påkrævet) - den tekststreng, der skal søges i.
- Mønster (påkrævet) - det regulære udtryk, der skal matches.
- Udskiftning (påkrævet) - den tekst, der skal erstatte de matchende delstrenge med.
- Instance_num (valgfrit) - den instans, der skal erstattes. Standardværdien er "alle kampe".
- Match_case (valgfrit) - bestemmer, om der skal matches (TRUE eller udeladt) eller ignoreres (FALSK) mellemrum i teksten.
Koden til funktionen findes her.
Eksempel: hvordan du erstatter eller fjerner strenge ved hjælp af regexes
Nogle af vores registreringer indeholder kreditkortnumre. Disse oplysninger er fortrolige, og du vil måske gerne erstatte dem med noget andet eller slette dem helt. Begge opgaver kan udføres ved hjælp af RegExpReplace Hvordan? I et andet scenario erstatter vi med en tom streng.
I vores eksempeltabel har alle kortnumre 16 cifre, som er skrevet i 4 grupper adskilt med mellemrum. For at finde dem gentager vi mønsteret ved hjælp af dette regulære udtryk:
Mønster : \b\d{4} \d{4} \d{4} \d{4} \d{4} \d{4}\b
Til erstatning anvendes følgende streng:
Udskiftning : XXXX XXXX XXXX XXXX XXXX XXXX
Og her er en komplet formel til erstatte kreditkortnumre med ufølsomme oplysninger:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX XXXX")
Med regex- og erstatningsteksten i separate celler (A2 og B2) fungerer formlen lige så godt:
I Excel er "fjernelse" et særligt tilfælde af "udskiftning". til fjerne kreditkortnumre, skal du blot bruge en tom streng ("") i stedet for udskiftning argument:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4} \d{4}\b", "")
Tip. Hvis du vil fjerne tomme linjer i resultaterne, kan du bruge en anden RegExpReplace-funktion som vist i dette eksempel: Sådan fjerner du tomme linjer ved hjælp af regex.
For yderligere oplysninger, se venligst:
- Sådan erstatter du strenge i Excel ved hjælp af regex
- Sådan fjerner du strenge ved hjælp af regex
- Sådan fjerner du mellemrum ved hjælp af regexes
Regex-værktøjer til at matche, udtrække, erstatte og fjerne understrenge
Brugerne af vores Ultimate Suite kan få alle mulighederne med regulære udtryk uden at indsætte en eneste linje kode i deres arbejdsmapper. Al den nødvendige kode er skrevet af vores udviklere og integreret i din Excel under installationen.
I modsætning til de VBA-funktioner, der er beskrevet ovenfor, er Ultimate Suites funktioner .NET-baserede, hvilket giver to hovedfordele:
- Du kan bruge regulære udtryk i normale .xlsx-arbejdsmapper uden at tilføje VBA-kode og uden at skulle gemme dem som makroaktiverede filer.
- .NET Regex-motoren understøtter fuldt udbyggede klassiske regulære udtryk, så du kan konstruere mere sofistikerede mønstre.
Sådan bruger du Regex i Excel
Når Ultimate Suite er installeret, er det lige så enkelt at bruge regulære udtryk i Excel som disse to trin:
- På den Ablebits Data under fanen, i fanen Tekst gruppe, klik på Regex-værktøjer .
- På den Regex-værktøjer skal du gøre følgende:
- Vælg kildedata.
- Indtast dit regex-mønster.
- Vælg den ønskede indstilling: Match , Uddrag , Fjern eller Udskift .
- Hvis du vil have resultatet som formel og ikke som værdi, skal du vælge Indsæt som en formel afkrydsningsfeltet.
- Tryk på handlingsknappen.
For at fjerne kreditkortnumre fra cellerne A2:A6 konfigurerer vi f.eks. disse indstillinger:
På et øjeblik vil en AblebitsRegex-funktion blive indsat i en ny kolonne til højre for dine oprindelige data. I vores tilfælde er formlen:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4} \d{4}\b")
Når formlen er der, kan du redigere, kopiere eller flytte den som enhver anden formel.
Sådan indsætter du en Regex-formel direkte i en celle
AblebitsRegex-funktionerne kan også indsættes direkte i en celle uden at bruge tilføjelsesprogrammets grænseflade. Sådan gør du:
- Klik på den fx på formellinjen eller Indsæt funktion på den Formler fanebladet.
- I den Indsæt funktion dialogboksen, skal du vælge den AblebitsUDF'er kategori, vælg den ønskede funktion, og klik på OK.
- Definer funktionens argumenter som du plejer, og klik på OK. Færdig!
Du kan finde flere oplysninger under Regex-værktøjer til Excel.
Sådan bruger du regulære udtryk til at matche, udtrække, erstatte og fjerne tekst i Excel-celler. Tak for din læsning, og jeg glæder mig til at se dig på vores blog i næste uge!
Tilgængelige downloads
Excel Regex - eksempler på formler (.xlsm-fil)
Ultimate Suite - prøveversion (.exe-fil)