Innehållsförteckning
Du förstår inte varför reguljära uttryck inte stöds i Excel-formler, men nu gör de det :) Med våra anpassade funktioner kan du enkelt hitta, ersätta, extrahera och ta bort strängar som matchar ett visst mönster.
Vid första anblicken har Excel allt du kan tänkas behöva för att manipulera textsträngar. Hmm... hur är det med reguljära uttryck? Oj, det finns inga inbyggda Regex-funktioner i Excel. Men ingen säger att vi inte kan skapa egna :)
Vad är ett reguljärt uttryck?
Ett reguljärt uttryck (även kallat Regex eller . regexp ) är en speciellt kodad sekvens av tecken som definierar ett sökmönster. Med hjälp av detta mönster kan du hitta en matchande teckenkombination i en sträng eller validera dataingång. Om du är bekant med jokerteckens notation kan du se regexer som en avancerad version av jokertecken.
Reguljära uttryck har sin egen syntax som består av specialtecken, operatörer och konstruktioner. [0-5] matchar till exempel varje enskild siffra från 0 till 5.
Reguljära uttryck används i många programmeringsspråk, inklusive JavaScript och VBA. Det senare har ett särskilt RegExp-objekt som vi ska använda för att skapa våra egna funktioner.
Har Excel stöd för regex?
Tyvärr finns det inga inbyggda Regex-funktioner i Excel. För att kunna använda reguljära uttryck i dina formler måste du skapa en egen användardefinierad funktion (VBA- eller .NET-baserad) eller installera verktyg från tredje part som stödjer regexer.
Excel Regex fusklapp
Oavsett om ett regexmönster är mycket enkelt eller extremt sofistikerat byggs det upp med hjälp av den vanliga syntaxen. Den här handledningen syftar inte till att lära dig reguljära uttryck. För detta finns det gott om resurser på nätet, från kostnadsfria handledningar för nybörjare till premiumkurser för avancerade användare.
Nedan följer en snabbreferens till de viktigaste RegEx-mönstren som hjälper dig att få ett grepp om grunderna. Den kan också fungera som ett fusklappsblad när du studerar ytterligare exempel.
Om du är bekväm med reguljära uttryck kan du hoppa direkt till RegExp-funktionerna.
Tecken
Detta är de vanligaste mönstren för att matcha vissa tecken.
Mönster | Beskrivning | Exempel | Matchar |
. | Jokertecken: matchar alla enskilda tecken utom radbrytning. | .ot | punkt , heta , gryta , @ot |
\d | Siffertecken: en enkel siffra från 0 till 9. | \d | På a1b , tändstickor 1 |
\D | Alla tecken som INTE är en siffra. | \D | På a1b , tändstickor a och b |
\s | Vinterutrymmen: mellanslag, tab, ny rad och vagnretur. | .\s. | På 3 cent , tändstickor 3 c |
\S | Alla tecken som inte är mellanslag | \S+ | På 30 cent , tändstickor 30 och cent |
\w | Ordtecken: alla ASCII-bokstäver, siffror eller understrykningar. | \w+ | På 5_cats*** , tändstickor 5_katter |
\W | Alla tecken som INTE är alfanumeriska tecken eller understrykningar. | \W+ | På 5_cats*** , tändstickor *** |
\t | Fliken | ||
\n | Ny linje | \n\d+ | I strängen med två rader nedan matchar 10 5 katter 10 hundar |
\ | Undviker ett teckens speciella betydelse, så att du kan söka efter det. | \. \w+\. | Undviker en punkt så att du kan hitta det bokstavliga tecknet "." i en sträng. Herr. , Fru. , Prof. |
Karaktärsklasser
Med hjälp av dessa mönster kan du matcha element i olika teckenuppsättningar.
Mönster | Beskrivning | Exempel | Matchar |
[tecken] | Matchar varje enskilt tecken inom parenteserna | d[oi]g | hund och gräva |
[^tecken] | Matchar varje enskilt tecken som INTE finns inom parenteserna. | d[^oi]g | Matchar dag, dug , d1g Matchar inte hund och gräva |
[från-till] | Matchar alla tecken i intervallet mellan parenteserna. | [0-9] [a-z] [A-Z] | En valfri siffra från 0 till 9. En enkel liten bokstav. En enkel stor bokstav |
Kvantiteter
Kvantifierare är speciella uttryck som anger antalet tecken som ska matchas. En kvantifierare gäller alltid det tecken som föregår den.
Mönster | Beskrivning | Exempel | Matchar |
* | Noll eller fler förekomster | 1a* | 1, 1a , 1aa, 1aaa , etc. |
+ | En eller flera förekomster | po+ | På gryta , tändstickor po På dålig , tändstickor bajs |
? | Noll eller en förekomst | roa?d | väg, stång |
*? | Noll eller fler förekomster, men så få som möjligt. | 1a*? | På 1a , 1aa och 1aaa , tändstickor 1a |
+? | En eller flera förekomster, men så få som möjligt. | po+? | På gryta och dålig , tändstickor po |
?? | Noll eller en förekomst, men så få som möjligt. | roa??? | På väg och stång , tändstickor ro |
{n} | Matchar det föregående mönstret n gånger | \d{3} | Exakt 3 siffror |
{n,} | Matchar det föregående mönstret n eller fler gånger. | \d{3,} | 3 eller fler siffror |
{n,m} | Matchar det föregående mönstret mellan n och m gånger. | \d{3,5} | Från 3 till 5 siffror |
Gruppering
Grupperingskonstruktioner används för att fånga upp en delsträng från källsträngen så att du kan utföra någon operation med den.
Syntax | Beskrivning | Exempel | Matchar |
(mönster) | Grupp för att fånga upp: fångar upp en matchande delsträng och tilldelar den ett ordningsnummer. | (\d+) | På 5 katter och 10 hundar , fångar 5 (grupp 1) och 10 (grupp 2) |
(?:mönster) | Grupp som inte fångas: matchar en grupp men fångar den inte. | (\d+)(?: hundar) | På 5 katter och 10 hundar , fångar 10 |
\1 | Innehållet i grupp 1 | (\d+)\+(\d+)=\2\+\1 | Matchar 5+10=10+5 och fångar 5 och 10 , som ingår i fångstgrupper |
\2 | Innehållet i grupp 2 |
Ankare
Ankare anger en position i inmatningssträngen där man ska leta efter en matchning.
Ankare | Beskrivning | Exempel | Matchar |
^ | Början av strängen Anmärkning: [^ inom parentes] betyder "inte". | ^\d+ | Valfritt antal siffror i början av strängen. På 5 katter och 10 hundar , tändstickor 5 |
$ | Slut på strängen | \d+$ | Valfritt antal siffror i slutet av strängen. På 10 plus 5 ger 15 , tändstickor 15 |
\b | Ordgräns | \bglädje\b | Matchar joy som ett separat ord, men inte i trevlig . |
\B | INTE en ordgräns | \Bjoy\B | Matchar joy på trevlig , men inte som ett eget ord. |
Konstruktionen Alternation (OR)
Operandan alternation aktiverar OR-logiken, så att du kan matcha antingen det här eller det andra elementet.
Konstruera | Beskrivning | Exempel | Matchar |
Matchar varje enskilt element som separeras av det vertikala strecket. | (s | På Hon säljer snäckor, matchar säljer och skal |
Utvägar
Lookaround-konstruktioner är användbara när du vill matcha något som följs eller inte följs eller föregås av något annat. Dessa uttryck kallas ibland "zero-width assertions" eller "zero-width match" eftersom de matchar en position snarare än faktiska tecken.
Observera: I VBA RegEx-funktionen stöds inte lookbehinds.
Mönster | Beskrivning | Exempel | Matchar |
(?=) | Positiv framtidsutsikt | X(?=Y) | Matchar uttrycket X när det följs av Y (dvs. om det finns Y före X). |
(?!) | Negativ framtidsutsikt | X(?!Y) | Matchar uttrycket X om det INTE följs av Y. |
(?<=) | Positiv titt bakåt | (?<=Y)X | Matchar uttrycket X när det föregås av Y (dvs. om det finns Y bakom X). |
(? )</td | Negativ titt bakåt | (? Y)X</td | Matchar uttrycket X när det INTE föregås av Y. |
Nu när du känner till det viktigaste kan vi gå vidare till den mest intressanta delen - att använda reggexer på riktiga data för att analysera strängar och hitta den information som behövs. Om du behöver mer information om syntaxen kan Microsofts guide om Regular Expression Language vara till hjälp.
Anpassade RegEx-funktioner för Excel
Som redan nämnts har Microsoft Excel inga inbyggda RegEx-funktioner. För att möjliggöra reguljära uttryck har vi skapat tre anpassade VBA-funktioner (även kallade användardefinierade funktioner). Du kan kopiera koderna från de sidor som är länkade nedan eller från vår exempelarbetsbok och sedan klistra in dem i dina egna Excel-filer.
Hur VBA RegExp-funktioner fungerar
Det här avsnittet förklarar den inre mekaniken och kan vara intressant för dem som vill veta exakt vad som händer på baksidan.
För att börja använda reguljära uttryck i VBA måste du antingen aktivera RegEx-objektreferensbiblioteket eller använda funktionen CreateObject. För att slippa ställa in referensen i VBA-redigeraren väljer vi det senare tillvägagångssättet.
RegExp-objektet har fyra egenskaper:
- Mönster - är den mönster att matcha i inmatningssträngen.
- Global - styr om alla träffar i inmatningssträngen ska hittas eller bara den första. I våra funktioner är den satt till True för att få alla matcher .
- MultiLine - bestämmer om mönstret ska matcha över radbrytningar i strängar med flera rader eller bara på den första raden. I våra koder är den satt till True för att söka i varje rad .
- IgnoreCase - definierar om ett reguljärt uttryck är skiftlägeskänsligt (standard) eller om det är skiftlägesokänsligt (inställt på True). I vårt fall beror det på hur du konfigurerar det valfria alternativet match_case Som standard är alla funktioner Skiftlägeskänslig .
Begränsningar för VBA RegExp
Excel VBA implementerar de viktigaste regex-mönstren, men saknar många avancerade funktioner som finns i .NET, Perl, Java och andra regex-motorer. VBA RegExp har till exempel inte stöd för inline-modifierare som (?i) för matchning som inte tar hänsyn till storleken på storleken eller (?m) för flersidigt läge, lookbehinds, POSIX-klasser, för att nämna några exempel.
Excel Regex Match-funktion
RegExpMatch funktionen söker i en inmatningssträng efter text som matchar ett reguljärt uttryck och returnerar TRUE om en matchning hittas och FALSE annars.
RegExpMatch(text, mönster, [match_case])Var:
- Text (obligatoriskt) - en eller flera strängar att söka i.
- Mönster (obligatoriskt) - det reguljära uttrycket som ska matchas.
- Match_case (valfritt) - Typ av matchning. TRUE eller utelämnas - skiftlägeskänslig; FALSE - skiftlägesokänslig.
Koden för funktionen finns här.
Exempel: hur man använder reguljära uttryck för att matcha strängar
Antag att du vill identifiera de poster som innehåller SKU-koder i nedanstående dataset.
Eftersom varje SKU börjar med två stora bokstäver, följt av ett bindestreck och fyra siffror, kan du matcha dem med följande uttryck.
Mönster : \b[A-Z]{2}-\d{4}\b
Där [A-Z]{2} betyder två valfria versaler från A till Z och \d{4} betyder fyra siffror från 0 till 9. En ordgräns \b visar att en SKU är ett separat ord och inte en del av en större sträng.
När mönstret är etablerat kan du börja skriva en formel som du brukar göra, och funktionens namn kommer att visas i listan som Excel föreslår med hjälp av AutoComplete:
Om vi antar att den ursprungliga strängen finns i A5, så är formeln följande:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
För att underlätta kan du ange det reguljära uttrycket i en separat cell och använda en absolut referens ($A$2) för mönster Detta garanterar att celladressen förblir oförändrad när du kopierar formeln till andra celler:
=RegExpMatch(A5, $A$2)
Om du vill visa dina egna textlappar i stället för TRUE och FALSE kan du bädda in RegExpMatch i IF-funktionen och ange de önskade texterna i value_if_true och value_if_false argument:
=IF(RegExpMatch(A5, $A$2), "Ja", "Nej")
För fler exempel på formler, se:
- Hur man matchar strängar med hjälp av reguljära uttryck
- Excel-datavalidering med regexer
Excel Regex Extraktfunktion
RegExpExtract funktionen söker efter delsträngar som matchar ett reguljärt uttryck och extraherar alla eller en specifik matchning.
RegExpExtract(text, mönster, [instance_num], [match_case])Var:
- Text (obligatoriskt) - den textsträng som ska sökas i.
- Mönster (obligatoriskt) - det reguljära uttrycket som ska matchas.
- Instance_num (valfritt) - ett serienummer som anger vilken instans som ska extraheras. Om det inte anges, returneras alla hittade träffar (standard).
- Match_case (valfritt) - anger om textbokstäver ska matchas (TRUE eller utelämnas) eller ignoreras (FALSE).
Du kan få koden för funktionen här.
Exempel: hur man extraherar strängar med hjälp av reguljära uttryck
Om vi tar vårt exempel lite längre, låt oss extrahera fakturanummer. För detta använder vi ett mycket enkelt regex som matchar alla 7-siffriga nummer:
Mönster : \b\d{7}\b
Sätt mönstret i A2 och du får jobbet gjort med denna kompakta och eleganta formula:
=RegExpExtract(A5, $A$2)
Om ett mönster stämmer överens med formeln extraherar formeln ett fakturanummer, om inget mönster stämmer överens med formeln returneras ingenting.
För fler exempel, se: Hur man extraherar strängar i Excel med hjälp av regex.
Excel Regex Ersätt funktion
RegExpReplace funktionen ersätter de värden som matchar en regex med den text som du anger.
RegExpReplace(text, mönster, ersättning, [instance_num], [match_case])Var:
- Text (obligatoriskt) - den textsträng som ska sökas i.
- Mönster (obligatoriskt) - det reguljära uttrycket som ska matchas.
- Ersättning (krävs) - den text som ska ersätta de matchande delsträngarna med.
- Instance_num (valfritt) - den instans som ska ersättas. Standardvärdet är "alla träffar".
- Match_case (valfritt) - anger om textbokstäver ska matchas (TRUE eller utelämnas) eller ignoreras (FALSE).
Koden för funktionen finns här.
Exempel: hur man ersätter eller tar bort strängar med hjälp av regexer
En del av våra register innehåller kreditkortsnummer. Denna information är konfidentiell och du kanske vill ersätta den med något annat eller radera den helt och hållet. Båda uppgifterna kan utföras med hjälp av RegExpReplace Hur? I ett andra scenario ersätter vi med en tom sträng.
I vår exempeltabell har alla kortnummer 16 siffror, som är skrivna i fyra grupper som är separerade med mellanslag. För att hitta dem replikerar vi mönstret med detta reguljära uttryck:
Mönster : \b\d{4} \d{4} \d{4} \d{4} \d{4}\b
Som ersättning används följande sträng:
Ersättning : XXXX XXXX XXXX XXXX XXXX XXXX
Och här är en fullständig formel för att byta ut kreditkortsnummer med okänslig information:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX")
Med regex och ersättningstext i separata celler (A2 och B2) fungerar formeln lika bra:
I Excel är "ta bort" ett särskilt fall av "ersätta". till ta bort kreditkortsnummer, använd bara en tom sträng ("") i stället för ersättning argument:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "")
Tips: För att få bort tomma rader i resultaten kan du använda en annan RegExpReplace-funktion som visas i det här exemplet: Hur man tar bort tomma rader med hjälp av regex.
För mer information, se:
- Hur du ersätter strängar i Excel med hjälp av regex
- Hur man tar bort strängar med hjälp av regex
- Hur man tar bort vitrymder med hjälp av regexer
Regex-verktyg för att matcha, extrahera, ersätta och ta bort delsträngar
Användarna av vår Ultimate Suite kan få alla krafter i reguljära uttryck utan att behöva lägga in en enda rad kod i sina arbetsböcker. All nödvändig kod skrivs av våra utvecklare och integreras smidigt i ditt Excel under installationen.
Till skillnad från de VBA-funktioner som diskuterats ovan är Ultimate Suits funktioner .NET-baserade, vilket ger två viktiga fördelar:
- Du kan använda reguljära uttryck i vanliga .xlsx-arbetsböcker utan att lägga till VBA-kod och utan att behöva spara dem som makroaktiverade filer.
- .NET Regex-motorn stöder fullständiga klassiska reguljära uttryck, vilket gör att du kan konstruera mer sofistikerade mönster.
Hur man använder Regex i Excel
När Ultimate Suite är installerad är det lika enkelt att använda reguljära uttryck i Excel som dessa två steg:
- På den Uppgifter om Ablebits på fliken Text grupp, klicka på Regex-verktyg .
- På den Regex-verktyg gör följande:
- Välj källdata.
- Ange ditt regex-mönster.
- Välj önskat alternativ: Match , Utdrag , Ta bort eller . Ersätt .
- Om du vill få resultatet som en formel och inte som ett värde väljer du Infoga som en formel kryssrutan.
- Tryck på åtgärdsknappen.
För att till exempel ta bort kreditkortsnummer från cellerna A2:A6 konfigurerar vi följande inställningar:
En AblebitsRegex-funktion kommer på ett ögonblick att infogas i en ny kolumn till höger om dina ursprungliga data. I vårt fall är formeln:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")
När formeln väl finns där kan du redigera, kopiera eller flytta den som vilken annan formel som helst.
Hur man infogar en Regex-formel direkt i en cell
AblebitsRegex-funktionerna kan också infogas direkt i en cell utan att använda tilläggsfunktionens gränssnitt. Så här går det till:
- Klicka på fx i formellfältet eller Infoga funktion på den Formler fliken.
- I Infoga funktion dialogrutan, väljer du den AblebitsUDFs Välj den funktion du vill ha och klicka på OK.
- Definiera funktionens argument som du brukar göra och klicka på OK. Klart!
Mer information finns i Regex-verktyg för Excel.
Så här använder du reguljära uttryck för att matcha, extrahera, ersätta och ta bort text i Excel-celler. Jag tackar dig för att du läste och ser fram emot att se dig på vår blogg nästa vecka!
Tillgängliga nedladdningar
Excel Regex - exempel på formler (.xlsm-fil)
Ultimate Suite - testversion (.exe-fil)