Regex for å fjerne visse tegn eller tekst i Excel

  • Dele Denne
Michael Brown
argumentet er utelatt, alle treff fjernes. For å slette et spesifikt samsvar, definer forekomstnummeret.

I strengene nedenfor antar du at du vil slette det første ordrenummeret. Alle slike tall starter med hash-tegnet (#) og inneholder nøyaktig 5 sifre. Så vi kan identifisere dem ved å bruke dette regulære uttrykket:

Mønster : #\d{5}\b

Ordgrensen \b spesifiserer at en samsvarende delstreng ikke kan være del av en større streng som #10000001.

For å fjerne alle treff, er ikke forekomstnummer -argumentet definert:

=RegExpReplace(A5, "#\d{5}\b", "")

For å fjerne bare den første forekomsten, setter vi forekomstnummer -argumentet til 1:

=RegExpReplace(A5, "#\d{5}\b", "", 1)

Regex for å fjerne visse tegn

For å fjerne visse tegn fra en streng, skriv ned alle uønskede tegn og separer dem med en vertikal streksyntaks fri for VBA RegExp-begrensninger, og for det andre, krever ikke å sette inn noen VBA-kode i arbeidsbøkene dine da all kodeintegrasjon gjøres av oss i backend.

Din del av jobben er å konstruere et regulært uttrykk og server det til funksjonen :) La meg vise deg hvordan du gjør det i et praktisk eksempel.

Hvordan fjerne tekst i parentes og parentes ved hjelp av regex

I lange tekststrenger, mindre viktig informasjon er ofte omgitt av [parentes] og (parentes). Hvordan fjerner du de irrelevante detaljene og beholder alle andre data?

Faktisk har vi allerede bygget et lignende regulært uttrykk for å slette html-tagger, dvs. tekst innenfor vinkelparenteser. Selvfølgelig vil de samme metodene også fungere for firkantede og runde parenteser.

Mønster : (\(.*?\))

Har du noen gang tenkt på hvor kraftig Excel ville vært hvis noen kunne berike verktøykassen med regulære uttrykk? Vi har ikke bare tenkt, men jobbet med det :) Og nå kan du legge til denne fantastiske RegEx-funksjonen i dine egne arbeidsbøker og slette understrenger som samsvarer med et mønster på kort tid!

I forrige uke så vi hvordan du bruker regulære uttrykk for å erstatte strenger i Excel. For dette opprettet vi en tilpasset Regex Replace-funksjon. Som det viste seg, går funksjonen utover dens primære bruk og kan ikke bare erstatte strenger, men også fjerne dem. Hvordan kan det være? Når det gjelder Excel, er det å fjerne en verdi ikke annet enn å erstatte den med en tom streng, noe vår Regex-funksjon er veldig god på!

VBA RegExp-funksjon for å fjerne delstrenger i Excel

Som vi alle vet, støttes ikke regulære uttrykk i Excel som standard. For å aktivere dem må du lage din egen brukerdefinerte funksjon. Den gode nyheten er at en slik funksjon allerede er skrevet, testet og klar til bruk. Alt du trenger å gjøre er å kopiere denne koden, lime den inn i VBA-editoren, og deretter lagre filen som en makroaktivert arbeidsbok (.xlsm).

Funksjonen har følgende syntaks:

RegExpReplace(tekst, mønster, erstatning, [instance_num], [match_case])

De tre første argumentene er obligatoriske, de to siste er valgfrie.

Hvor:

  • Tekst - tekststrengen for å søkemulig til den finner en avsluttende parentes.

Uansett hvilket mønster du velger, vil resultatet være helt det samme.

For eksempel, for å fjerne alle html-tagger fra en streng i A5 og la tekst, formelen er:

=RegExpReplace(A5, "]*>", "")

Eller du kan bruke lazy quantifier som vist på skjermbildet:

Denne løsningen fungerer perfekt for enkelttekst (rad 5 - 9). For flere tekster (rad 10 - 12) er resultatene tvilsomme - tekster fra forskjellige tagger slås sammen til én. Er dette riktig eller ikke? Jeg er redd, det er ikke noe som enkelt kan avgjøres - alt avhenger av din forståelse av det ønskede resultatet. For eksempel, i B11 forventes resultatet "A1"; mens i B10 vil du kanskje at "data1" og "data2" skal skilles med et mellomrom.

For å fjerne html-tagger og skille de resterende tekstene med mellomrom, kan du fortsette på denne måten:

  1. Erstatt tagger med mellomrom " ", ikke tomme strenger:

    =RegExpReplace(A5, "]*>", " ")

  2. Reduser flere mellomrom til ett enkelt mellomromstegn:

    =RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")

  3. Trim ledende og etterfølgende mellomrom:

    =TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))

Resultatet vil se omtrent slik ut:

Ablebits Regex Remove Tool

Hvis du har hatt en sjanse til å bruke Ultimate Suite for Excel, har du sannsynligvis allerede oppdaget de nye Regex-verktøyene som ble introdusert med den nylige utgivelsen. Det fine med disse .NET-baserte Regex-funksjonene er at de for det første støtter regulært uttrykk med alle funksjoneralternativet Fjern , og trykk Fjern .

For å få resultatene som formler, ikke verdier, merk av for Sett inn som en formel .

For å fjerne tekst i parentes fra strenger i A2:A5, konfigurerer vi innstillingene som følger:

Som et resultat blir AblebitsRegexRemove -funksjonen satt inn i en ny kolonne ved siden av de opprinnelige dataene dine.

Funksjonen kan også legges inn direkte i en celle via standard dialogboksen Sett inn funksjon , hvor den er kategorisert under AblebitsUDFs .

Siden AblebitsRegexRemove er designet for å fjerne tekst, krever det bare to argumenter - kildestrengen og regulært uttrykk. Begge parametere kan defineres direkte i en formel eller leveres i form av cellereferanser. Om nødvendig kan denne tilpassede funksjonen brukes sammen med alle innfødte.

For å trimme ekstra mellomrom i de resulterende strengene, kan du for eksempel bruke TRIM-funksjonen som omslag:

=TRIM(AblebitsRegexRemove(A5, $A$2))

Slik fjerner du strenger i Excel ved hjelp av regulære uttrykk. Jeg takker for at du leser og ser frem til å se deg på bloggen vår neste uke!

Tilgjengelige nedlastinger

Fjern strenger ved å bruke regulært uttrykk - eksempler (.xlsm-fil)

Ultimate Suite - prøveversjon (.exe-fil)

in.
  • Mønster - det regulære uttrykket å søke etter.
  • Erstatning - teksten som skal erstattes med. For å fjerne understrenger som samsvarer med mønsteret, bruk en tom streng ("") som erstatning.
  • Forekomstnummer (valgfritt) - forekomsten til erstatte. Hvis det utelates, erstattes alle treff (standard).
  • Samsvar (valgfritt) - en boolsk verdi som indikerer om tekst skal samsvare eller ignoreres. For å skille mellom store og små bokstaver, bruk TRUE (standard); for store og små bokstaver - FALSE.
  • For mer informasjon, se RegExpReplace-funksjonen.

    Tips. I enkle tilfeller kan du fjerne bestemte tegn eller ord fra celler med Excel-formler. Men regulære uttrykk gir mange flere muligheter for dette.

    Hvordan fjerne strenger ved hjelp av regulære uttrykk - eksempler

    Som nevnt ovenfor, for å fjerne deler av teksten som samsvarer med et mønster, må du erstatte dem med en tom streng. Så, en generisk formel har denne formen:

    RegExpReplace(tekst, mønster, "", [instance_num], [match_case])

    Eksemplene nedenfor viser ulike implementeringer av dette grunnleggende konseptet.

    Fjern alle treff eller spesifikke treff

    RegExpReplace-funksjonen er designet for å finne alle understrenger som samsvarer med et gitt regulært uttrykk. Hvilke forekomster som skal fjernes styres av det fjerde valgfrie argumentet, kalt forekomstnummer .

    Standard er "alle samsvarer" - når forekomstnummer sammenkoblingsoperatør (&) og tekstfunksjoner som RIGHT, MID og LEFT.

    For å skrive alle telefonnumre i formatet (123) 456-7890, er formelen:

    ="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)

    Hvor B5 er utdata fra RegExpReplace-funksjonen.

    Fjern spesialtegn ved hjelp av regex

    I en av veiledningene våre, vi så på hvordan du fjerner uønskede tegn i Excel ved å bruke innebygde og tilpassede funksjoner. Regelmessige uttrykk gjør ting mye enklere! I stedet for å liste opp alle tegnene som skal slettes, spesifiser du bare de du vil beholde :)

    Mønsteret er basert på negerte karakterklasser - en indikator settes i en tegnklasse [^ ] for å matche et enkelt tegn IKKE i parentes. +-kvantifikatoren tvinger den til å betrakte påfølgende tegn som et enkelt samsvar, slik at en erstatning gjøres for en samsvarende delstreng i stedet for for hvert enkelt tegn.

    Avhengig av dine behov, velg en av følgende regekser.

    For å fjerne ikke-alfanumeriske tegn, dvs. alle tegn unntatt bokstaver og sifre:

    Mønster : [^0-9a-zA-Z] +

    For å slette alle tegn unntatt bokstaver , siffer og mellomrom :

    Mønster : [^0-9a-zA-Z ]+

    For å slette alle tegn unntatt bokstaver , siffer og understrek , kan du bruke \ W som står for ethvert tegn som IKKE er alfanumerisk tegn ellerunderstrek:

    Mønster : \W+

    Hvis du vil beholde noen andre tegn , f.eks. skilletegn, sett dem innenfor parentes.

    For å fjerne et hvilket som helst annet tegn enn en bokstav, siffer, punktum, komma eller mellomrom, bruk følgende regulære uttrykk:

    Mønster : [^0-9a-zA-Z\., ]+

    Dette eliminerer alle spesialtegn, men ekstra mellomrom gjenstår.

    For å fikse dette, kan du neste funksjonen ovenfor inn i en annen som erstatter flere mellomrom med ett enkelt mellomrom.

    =RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")

    Eller bare bruk den opprinnelige TRIM-funksjonen med samme effekt :

    =TRIM(RegExpReplace(A5, $A$2, ""))

    Regex for å fjerne ikke-numeriske tegn

    For å slette alle ikke-numeriske tegn fra en streng, kan du bruke enten denne lange formelen eller en av de veldig enkle regeksene som er oppført nedenfor.

    Samsvar ethvert tegn som IKKE er et siffer:

    Mønster : \D+

    Strip ikke-numeriske tegn ved å bruke negerte klasser:

    Mønster : [^0-9]+

    Mønster : [^\d] +

    Tips. Hvis målet ditt er å fjerne tekst og søle de gjenværende tallene inn i separate celler eller plassere dem alle i én celle atskilt med et spesifisert skilletegn, bruk RegExpExtract-funksjonen som forklart i Hvordan trekke ut tall fra streng ved hjelp av regulære uttrykk.

    Regex for å fjerne alt etter mellomrom

    For å slette alt etter et mellomrom, bruk enten mellomrom ( ) ellermellomrom (\s) for å finne det første mellomrom og .* for å matche tegn etter det.

    Hvis du har enlinjestrenger som bare inneholder normale mellomrom (verdi 32 i 7-bits ASCII-systemet) , spiller det ingen rolle hvilke av regeksene nedenfor du bruker. Når det gjelder strenger med flere linjer, utgjør det en forskjell.

    For å fjerne alt etter et mellomromstegn , bruk dette regulære uttrykket:

    Mønster : " .*"

    =RegExpReplace(A5, " .*", "")

    Denne formelen vil fjerne alt etter det første mellomrommet i hver linje . For at resultatene skal vises riktig, sørg for å slå på Wrap Text.

    For å fjerne alt etter et mellomrom (inkludert et mellomrom, tabulator, vognretur og ny linje), regex er:

    Mønster : \s.*

    =RegExpReplace(A5, "\s.*", "")

    Fordi \s samsvarer med noen få forskjellige mellomromstyper inkludert en ny linje (\n), sletter denne formelen alt etter det første mellomrommet i en celle, uansett hvor mange linjer det er i den.

    Regex for å fjerne tekst etter spesifikk tegn

    Ved å bruke metodene fra forrige eksempel kan du slette tekst etter et hvilket som helst tegn du spesifiserer.

    For å håndtere hver linje separat:

    Generisk mønster : char.*

    I enkeltlinjestrenger vil dette fjerne alt etter char . I strenger med flere linjer vil hver linje bli behandlet individuelt fordi i VBA Regex-smaken samsvarer et punktum (.) med et hvilket som helst tegn bortsett fra en nystarten av en streng ^, matcher vi null eller flere tegn uten mellomrom [^ ]* som umiddelbart etterfølges av ett eller flere mellomrom " +". Den siste delen legges til for å forhindre potensielle innledende mellomrom i resultatene.

    For å fjerne tekst før første mellomrom på hver linje, skrives formelen i standard "alle treff"-modus ( forekomst_nummer utelatt):

    =RegExpReplace(A5, "^[^ ]* +", "")

    For å slette tekst før det første mellomrommet på den første linjen, og la alle andre linjer være intakte, settes forekomstnummer -argumentet til 1:

    =RegExpReplace(A5, "^[^ ]* +", "", 1)

    Regex for å fjerne alt før tegn

    Den enkleste måten å fjerne all tekst før et spesifikt tegn er ved å bruke et regulært uttrykk slik:

    Generisk mønster : ^[^char]*char

    Oversatt til et menneskelig språk står det: "fra starten av en streng forankret av ^ , match 0 eller flere tegn unntatt char [^char]* opp til første forekomst av char .

    For eksempel for å slette all tekst før det første kolon , bruk dette regulære uttrykket:

    Mønster : ^[^:]*:

    For å unngå innledende mellomrom i resultatene, legg til et mellomromstegn \s* i slutt. Dette vil fjerne alt g før det første kolon og trim eventuelle mellomrom rett etter det:

    Mønster : ^[^:]*:\s*

    =RegExpReplace(A5, "^[^:]*:\s*", "")

    Tips. I tillegg til regulære uttrykk, har Excel sine egne måter å fjerne tekst etter posisjon eller samsvar. For å lære hvordan du utfører oppgaven med opprinnelige formler,se hvordan du fjerner tekst før eller etter et tegn i Excel.

    Regex for å fjerne alt unntatt

    For å fjerne alle tegn fra en streng unntatt de du vil beholde, bruk negerte tegnklasser.

    For eksempel, for å fjerne alle tegn unntatt små bokstaver og prikker, regex er:

    Mønster : [^a-z\.]+

    Faktisk kunne vi klart oss uten +-kvantifikatoren her ettersom funksjonen vår erstatter alle funnet treff. Kvantifisereren gjør det bare litt raskere - i stedet for å håndtere hvert enkelt tegn, erstatter du en delstreng.

    =RegExpReplace(A5, "[^a-z\.]+", "")

    Regex for å fjerne html-tagger i Excel

    For det første bør det bemerkes at HTML ikke er et vanlig språk, så å analysere det ved hjelp av regulære uttrykk er ikke den beste måten. Når det er sagt, kan regexes definitivt hjelpe med å fjerne tagger fra cellene dine for å gjøre datasettet ditt renere.

    Gi at html-tagger alltid er plassert innenfor vinkelparenteser, kan du finne dem ved å bruke en av følgende regexes.

    Negert klasse:

    Mønster : ]*>

    Her matcher vi en åpningsvinkelparentes, etterfulgt av null eller flere forekomster av et hvilket som helst tegn bortsett fra lukkevinkelbrakett [^>]* opp til nærmeste lukkevinkelparentes.

    Lazy search:

    Mønster :

    Her matcher vi alt fra den første åpningsbraketten til den første lukkebraketten. Spørsmålstegnet tvinger .* til å matche så få tegn somlinje.

    For å behandle alle linjer som en enkelt streng:

    Generisk mønster : char(.

    Michael Brown er en dedikert teknologientusiast med en lidenskap for å forenkle komplekse prosesser ved hjelp av programvareverktøy. Med mer enn ti års erfaring i teknologibransjen, har han forbedret ferdighetene sine i Microsoft Excel og Outlook, samt Google Sheets og Docs. Michaels blogg er dedikert til å dele sin kunnskap og ekspertise med andre, og gir enkle å følge tips og veiledninger for å forbedre produktivitet og effektivitet. Enten du er en erfaren profesjonell eller nybegynner, tilbyr Michaels blogg verdifull innsikt og praktiske råd for å få mest mulig ut av disse viktige programvareverktøyene.