Regex om sekere karakters of teks in Excel te verwyder

  • Deel Dit
Michael Brown
argument weggelaat word, word alle gevind passings verwyder. Om 'n spesifieke passing te skrap, definieer die instansienommer.

In die onderstaande stringe, veronderstel jy wil die eerste ordenommer uitvee. Al sulke nommers begin met die hash-teken (#) en bevat presies 5 syfers. Dus, ons kan hulle identifiseer deur hierdie regex te gebruik:

Patroon : #\d{5}\b

Die woordgrens \b spesifiseer dat 'n bypassende substring nie kan wees nie deel van 'n groter string soos #10000001.

Om alle passings te verwyder, is die instance_num -argument nie gedefinieer nie:

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

Om slegs die eerste voorkoms uit te roei, stel ons die geval_num -argument op 1:

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

Regex om sekere karakters te verwyder

Om sekere karakters van 'n string af te stroop, skryf net alle ongewenste karakters neer en skei hulle met 'n vertikale balksintaksis vry van VBA RegExp-beperkings, en tweedens, hoef nie enige VBA-kode in jou werkboeke in te voeg nie, aangesien alle kode-integrasie deur ons by die agterkant gedoen word.

Jou deel van die werk is om 'n gereelde uitdrukking te bou en dien dit vir die funksie :) Laat ek jou wys hoe om dit te doen op 'n praktiese voorbeeld.

Hoe om teks tussen hakies en hakies te verwyder deur gebruik te maak van regex

In lang teksstringe, minder belangrike inligting word dikwels tussen [hakies] en (hakies) ingesluit. Hoe verwyder jy daardie irrelevante besonderhede deur alle ander data te behou?

Om die waarheid te sê, ons het reeds 'n soortgelyke regeks gebou vir die uitvee van html-merkers, dit wil sê teks binne hoekhakies. Uiteraard sal dieselfde metodes ook vir vierkantige en ronde hakies werk.

Patroon : (\(.*?\))

Het jy al ooit gedink hoe kragtig Excel sou wees as iemand sy gereedskapkas met gereelde uitdrukkings kon verryk? Ons het nie net daaraan gedink nie, maar daaraan gewerk :) En nou kan jy hierdie wonderlike RegEx-funksie by jou eie werkboeke voeg en substringe wat by 'n patroon pas, in 'n japtrap uitvee!

Verlede week het ons gekyk hoe om gereelde uitdrukkings te gebruik om stringe in Excel te vervang. Hiervoor het ons 'n pasgemaakte Regex Replace-funksie geskep. Soos dit geblyk het, gaan die funksie verder as die primêre gebruik daarvan en kan dit nie net stringe vervang nie, maar dit ook verwyder. Hoe kan dit wees? In terme van Excel is die verwydering van 'n waarde niks anders as om dit met 'n leë string te vervang nie, iets waarmee ons Regex-funksie baie goed is!

VBA RegExp-funksie om substringe in Excel te verwyder

Soos ons almal weet, word gereelde uitdrukkings nie by verstek in Excel ondersteun nie. Om dit te aktiveer, moet jy jou eie gebruiker-gedefinieerde funksie skep. Die goeie nuus is dat so 'n funksie reeds geskryf, getoets en gereed is vir gebruik. Al wat jy hoef te doen is om hierdie kode te kopieer, dit in jou VBA-redigeerder te plak, en dan jou lêer te stoor as 'n makro-geaktiveerde werkboek (.xlsm).

Die funksie het die volgende sintaksis:

RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

Die eerste drie argumente word vereis, die laaste twee is opsioneel.

Waar:

  • Teks - die teksstring om te soekmoontlik totdat dit 'n sluitingshakie vind.

Watter patroon jy ook al kies, die resultaat sal absoluut dieselfde wees.

Om byvoorbeeld alle html-etikette van 'n string in A5 te verwyder en teks te laat, die formule is:

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

Of jy kan die lui kwantifiseerder gebruik soos in die skermkiekie getoon:

Hierdie oplossing werk perfek vir enkele teks (rye 5 - 9). Vir veelvuldige tekste (rye 10 - 12), is die resultate twyfelagtig - tekste van verskillende etikette word in een saamgevoeg. Is dit korrek of nie? Ek is bevrees, dit is nie iets wat maklik besluit kan word nie – alles hang af van jou begrip van die gewenste uitkoms. Byvoorbeeld, in B11 word die resultaat "A1" verwag; terwyl in B10, jy dalk wil hê dat "data1" en "data2" met 'n spasie geskei moet word.

Om html-etikette te verwyder en die oorblywende tekste met spasies te skei, kan jy op hierdie manier voortgaan:

  1. Vervang merkers met spasies " ", nie leë stringe nie:

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

  2. Verminder veelvuldige spasies tot 'n enkele spasiekarakter:

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

  3. Sny voorste en agterste spasies:

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

Die resultaat sal so lyk:

Ablebits Regex Remove Tool

As jy 'n kans gehad het om ons Ultimate Suite vir Excel te gebruik, het jy waarskynlik reeds die nuwe Regex-nutsgoed ontdek wat met die onlangse vrystelling bekendgestel is. Die skoonheid van hierdie .NET-gebaseerde Regex-funksies is dat hulle eerstens volwaardige gereelde uitdrukking ondersteundie Verwyder opsie, en druk Verwyder .

Om die resultate as formules te kry, nie waardes nie, kies die Voeg in as 'n formule -merkblokkie.

Om teks tussen hakies van stringe in A2:A5 te verwyder, stel ons die instellings op soos volg:

As gevolg hiervan word die AblebitsRegexRemove -funksie in 'n nuwe kolom langs jou oorspronklike data ingevoeg.

Die funksie kan ook direk in 'n sel ingevoer word via die standaard Voeg funksie in dialoogkassie, waar dit onder AblebitsUDFs gekategoriseer word.

Aangesien AblebitsRegexRemove ontwerp is om teks te verwyder, vereis dit slegs twee argumente - die bronstring en regeks. Beide parameters kan direk in 'n formule gedefinieer word of in die vorm van selverwysings verskaf word. Indien nodig, kan hierdie pasgemaakte funksie saam met enige inheemse funksie gebruik word.

Om byvoorbeeld ekstra spasies in die resulterende stringe te snoei, kan jy die TRIM-funksie as 'n omhulsel gebruik:

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

Dit is hoe om stringe in Excel te verwyder deur gereelde uitdrukkings te gebruik. Ek bedank jou vir die lees en sien uit daarna om jou volgende week op ons blog te sien!

Beskikbare aflaaie

Verwyder stringe deur gebruik te maak van regex - voorbeelde (.xlsm-lêer)

Ultimate Suite - proefweergawe (.exe-lêer)

in.
  • Patroon - die gereelde uitdrukking om na te soek.
  • Vervanging - die teks om mee te vervang. Om substringe te verwyder wat by die patroon pas, gebruik 'n leë string ("") vir vervanging.
  • Instance_num (opsioneel) - die instansie om vervang. As dit weggelaat word, word alle gevind passings vervang (verstek).
  • Match_case (opsioneel) - 'n Boole-waarde wat aandui of teksletters ooreenstem of ignoreer. Vir hooflettersensitiewe passing, gebruik TRUE (verstek); vir hoofletter-onsensitief - ONWAAR.
  • Vir meer inligting, sien asseblief RegExpReplace-funksie.

    Wenk. In eenvoudige gevalle kan jy spesifieke karakters of woorde uit selle verwyder met Excel-formules. Maar gereelde uitdrukkings bied baie meer opsies hiervoor.

    Hoe om stringe te verwyder deur gebruik te maak van gereelde uitdrukkings - voorbeelde

    Soos hierbo genoem, om dele van teks wat by 'n patroon pas te verwyder, moet jy dit vervang met 'n leë tou. Dus, 'n generiese formule neem hierdie vorm aan:

    RegExpReplace(teks, patroon, "", [instance_num], [match_case])

    Die onderstaande voorbeelde toon verskeie implementerings van hierdie basiese konsep.

    Verwyder alle passings of spesifieke passing

    Die RegExpReplace-funksie is ontwerp om alle substringe te vind wat by 'n gegewe regex pas. Watter gevalle om te verwyder word beheer deur die 4de opsionele argument, genaamd geval_num .

    Die verstek is "alle pas" - wanneer die geval_nommer aaneenskakelingsoperateur (&) en teksfunksies soos REGS, MIDDEL en LINKS.

    Om byvoorbeeld alle telefoonnommers in die (123) 456-7890-formaat te skryf, is die formule:

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

    Waar B5 die uitvoer van die RegExpReplace-funksie is.

    Verwyder spesiale karakters deur gebruik te maak van regex

    In een van ons tutoriale, ons het gekyk hoe om ongewenste karakters in Excel te verwyder deur ingeboude en pasgemaakte funksies te gebruik. Gereelde uitdrukkings maak dinge baie makliker! In plaas daarvan om al die karakters te lys om uit te vee, spesifiseer net die karakters wat jy wil behou :)

    Die patroon is gebaseer op genegeerde karakterklasse - 'n karet word binne 'n karakterklas geplaas [^ ] om enige enkele karakter NIE tussen hakies te pas nie. Die + kwantifiseerder dwing dit om opeenvolgende karakters as 'n enkele passing te beskou, sodat 'n vervanging gedoen word vir 'n bypassende substring eerder as vir elke individuele karakter.

    Afhangende van jou behoeftes, kies een van die volgende regekse.

    Om nie-alfanumeriese karakters te verwyder, dit wil sê alle karakters behalwe letters en syfers:

    Patroon : [^0-9a-zA-Z] +

    Om alle karakters behalwe letters , syfers en spasies te verwyder:

    Patroon : [^0-9a-zA-Z ]+

    Om alle karakters behalwe letters , syfers en onderstreep uit te vee, kan jy \ gebruik W wat staan ​​vir enige karakter wat NIE alfanumeriese karakter ofonderstreep:

    Patroon : \W+

    As jy 'n paar ander karakters wil behou , bv. leestekens, plaas dit binne die hakies.

    Om byvoorbeeld enige ander karakter as 'n letter, syfer, punt, komma of spasie af te stroop, gebruik die volgende regeks:

    Patroon : [^0-9a-zA-Z\., ]+

    Dit skakel alle spesiale karakters suksesvol uit, maar ekstra witspasie bly oor.

    Om dit reg te stel, kan jy die bogenoemde funksie in 'n ander een nes wat veelvuldige spasies met 'n enkele spasiekarakter vervang.

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

    Of gebruik net die oorspronklike TRIM-funksie met dieselfde effek :

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

    Regex om nie-numeriese karakters te verwyder

    Om alle nie-numeriese karakters uit 'n string te skrap, kan jy gebruik óf hierdie lang formule óf een van die baie eenvoudige regekse hieronder gelys.

    Pas enige karakter wat NIE 'n syfer is nie:

    Patroon : \D+

    Stroop nie-numeriese karakters deur ontkende klasse te gebruik:

    Patroon : [^0-9]+

    Patroon : [^\d] +

    Wenk. As jou doel is om teks te verwyder en die oorblywende nommers in aparte selle te mors of hulle almal in een sel te plaas wat geskei is met 'n gespesifiseerde skeidingsteken, gebruik dan die RegExpExtract-funksie soos verduidelik in Hoe om nommers uit string te onttrek deur gebruik te maak van gewone uitdrukkings.

    Regex om alles na spasie te verwyder

    Om alles na 'n spasie uit te vee, gebruik óf die spasie ( ) ófwitspasie (\s) karakter om die eerste spasie te vind en .* om enige karakters daarna te pas.

    As jy enkellyn-stringe het wat net normale spasies bevat (waarde 32 in die 7-bis ASCII-stelsel) , maak dit nie regtig saak watter van die onderstaande regexes jy gebruik nie. In die geval van meerlynstringe maak dit wel 'n verskil.

    Om alles na 'n spasiekarakter te verwyder, gebruik hierdie regeks:

    Patroon : " .*"

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

    Hierdie formule sal enigiets na die eerste spasie in elke reël stroop. Vir die resultate om korrek te vertoon, maak seker dat Omvou teks aanskakel.

    Om alles na 'n witspasie (insluitend 'n spasie, oortjie, koetretoer en nuwe reël) af te stroop, die regeks is:

    Patroon : \s.*

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

    Omdat \s by 'n paar verskillende witspasietipes pas, insluitend 'n nuwe reël (\n), vee hierdie formule alles uit na die eerste spasie in 'n sel, maak nie saak hoeveel reëls daar in is nie.

    Regex om teks na spesifieke karakter

    Deur die metodes van die vorige voorbeeld te gebruik, kan jy teks ná enige karakter wat jy spesifiseer, uitwis.

    Om elke reël afsonderlik te hanteer:

    Generiese patroon : char.*

    In enkellyn-stringe sal dit alles na char verwyder. In meerlynstringe sal elke reël individueel verwerk word, want in die VBA Regex-geur pas 'n punt (.) by enige karakter behalwe 'n nuwebegin van 'n string ^, pas ons nul of meer nie-spasie karakters [^ ]* wat onmiddellik gevolg word deur een of meer spasies " +". Die laaste deel word bygevoeg om potensiële voorste spasies in die resultate te voorkom.

    Om teks voor die eerste spasie in elke reël te verwyder, word die formule in die verstek "alle passings"-modus geskryf ( instance_num weggelaat):

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

    Om teks voor die eerste spasie in die eerste reël uit te vee, en alle ander reëls ongeskonde te laat, word die geval_num -argument op 1 gestel:

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

    Regex om alles voor karakter af te stroop

    Die maklikste manier om alle teks voor 'n spesifieke karakter te verwyder, is deur 'n regex te gebruik soos hierdie:

    Generiese patroon : ^[^char]*char

    Vertaal in 'n menslike taal, sê dit: "van die begin van 'n string geanker deur ^ , pas 0 of meer karakters behalwe char [^char]* tot by die eerste voorkoms van char .

    Om byvoorbeeld alle teks voor die eerste dubbelpunt te skrap , gebruik hierdie gereelde uitdrukking:

    Patroon : ^[^:]*:

    Om voorste spasies in die resultate te vermy, voeg 'n witspasiekarakter \s* by die einde. Dit sal alles verwyder g voor die eerste dubbelpunt en sny enige spasies net daarna af:

    Patroon : ^[^:]*:\s*

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

    Wenk. Behalwe gereelde uitdrukkings, het Excel sy eie maniere om teks volgens posisie of pasmaat te verwyder. Om te leer hoe om die taak met inheemse formules te bereik,sien asseblief Hoe om teks voor of na 'n karakter in Excel te verwyder.

    Regex om alles te verwyder behalwe

    Om alle karakters uit 'n string uit te roei behalwe dié wat jy wil behou, gebruik ontkende karakterklasse.

    Byvoorbeeld, om alle karakters behalwe kleinletters te verwyder en kolletjies, die regeks is:

    Patroon : [^a-z\.]+

    Om die waarheid te sê, ons kan sonder die + kwantifiseerder hier klaarkom aangesien ons funksie alles vervang pasmaats gevind. Die kwantifiseerder maak dit net 'n bietjie vinniger - in plaas daarvan om elke individuele karakter te hanteer, vervang jy 'n substring.

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

    Regex om html-etikette in Excel te verwyder

    Eerstens moet daarop gelet word dat HTML nie 'n gewone taal is nie, dus is dit nie die beste manier om dit met behulp van gewone uitdrukkings te ontleed nie. Dit gesê, regekse kan beslis help om merkers uit jou selle te stroop om jou datastel skoner te maak.

    Gegewe dat html-merkers altyd binne hoekhakies geplaas word, kan jy dit vind deur een van die volgende regekse te gebruik.

    Negeerde klas:

    Patroon : ]*>

    Hier pas ons 'n openingshoekhakie, gevolg deur nul of meer voorkomste van enige karakter behalwe die sluitingshoekhakie [^>]* tot by die naaste sluitingshoekhakie.

    Lui soektog:

    Patroon :

    Hier pas ons enigiets van die eerste openingshakie tot die eerste sluithakie. Die vraagteken dwing .* om so min karakters te pas aslyn.

    Om alle lyne as 'n enkele string te verwerk:

    Generiese patroon : char(.

    Michael Brown is 'n toegewyde tegnologie-entoesias met 'n passie om komplekse prosesse te vereenvoudig deur sagteware-instrumente te gebruik. Met meer as 'n dekade se ondervinding in die tegnologiebedryf, het hy sy vaardighede in Microsoft Excel en Outlook, sowel as Google Sheets en Docs, opgeskerp. Michael se blog is toegewy daaraan om sy kennis en kundigheid met ander te deel, en verskaf maklik-om-te volg wenke en tutoriale vir die verbetering van produktiwiteit en doeltreffendheid. Of jy nou 'n ervare professionele persoon of 'n beginner is, Michael se blog bied waardevolle insigte en praktiese raad om die meeste uit hierdie noodsaaklike sagteware-nutsmiddels te kry.