Tühikute ja tühjade ridade eemaldamine Excelis Regexi abil

  • Jaga Seda
Michael Brown

Soovite käsitleda tühikuid kõige tõhusamalt? Kasutage regulaarseid väljendeid, et eemaldada kõik tühikud lahtrist, asendada mitu tühikut ühe märgiga, lõigata tühikuid ainult numbrite vahel ja palju muud.

Ükskõik, milliseid sisendandmeid kasutate, vaevalt, et kohtate andmestikku ilma tühikuteta. Enamasti on tühik hea - kasutate seda erinevate teabeosade visuaalseks eraldamiseks, et neid oleks lihtsam tajuda. Mõnes olukorras võib see aga muutuda kurjaks - liigsed tühikud võivad teie valemeid segi ajada ja muuta teie töölehed peaaegu käsitlematuks.

    Miks kasutada regulaaravaldist, et kärpida Excelis tühikuid?

    Enne kui me sukeldume regulaaravaldiste kasutamise nüansse, et eemaldada tühikuid Exceli töölehtedelt, tahaksin esmalt vastata küsimusele, mis tuleb meelde - milleks meil on vaja regulaaravaldisi, kui Excelis on juba olemas TRIM-funktsioon?

    Et mõista erinevust, vaatame, mida loetakse mõlemal juhul tühjaks:

    • Sisseehitatud TRIM-funktsioon saab eemaldada ainult tühiku märk millel on 7-bitises ASCII süsteemis väärtus 32.
    • Regulaaravaldised võivad tuvastada mõned erinevad tühiku vormid, nagu tühik ( ), tabulaator (\t), vagunitagasi (\r) ja uus rida (\n). Lisaks on olemas ka funktsioon tühiku märk (\s), mis sobib kõigi nende tüüpidega ja on äärmiselt kasulik toorandmete puhastamisel.

    Teades täpselt, mis toimub kulisside taga, on palju lihtsam välja töötada lahendus, eks?

    Kuidas lubada regulaarseid väljendeid Excelis

    On üldtuntud tõsiasi, et standardvarustuses olev Excel ei toeta regulaarseid väljendeid. Nende võimaldamiseks tuleb luua kohandatud VBA funktsioon. Õnneks on meil juba olemas üks, mille nimi on RegExpReplace Oot, miks "asendada", kui me räägime eemaldamisest? Exceli keeles on "eemaldada" lihtsalt teine sõna "asendada tühja stringiga" :)

    Funktsiooni lisamiseks Excelisse kopeerige selle kood sellelt leheküljelt, kleepige see VBA redaktorisse ja salvestage oma fail kui makrotoimingutega töövihik (.xlsm).

    Siin on funktsiooni süntaks teie jaoks:

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

    Esimesed kolm argumenti on kohustuslikud, kaks viimast on vabatahtlikud.

    Kus:

    • Tekst - algne string, mida otsida.
    • Muster - regex, mida otsida.
    • Asendus - tekst, millega asendada. Et eemaldada whitespaces , paneksite selle argumendi kas:
      • tühi string (""), et eemaldada absoluutselt kõik tühikud
      • kosmos märk (" "), et asendada mitu tühikut ühe tühikuga
    • Instance_num (valikuline) - instantsi number. Enamasti jätate selle välja, et asendada kõik instantsid (vaikimisi).
    • Match_case (valikuline) - bool'i väärtus, mis näitab, kas tekstilahtrid sobivad (TRUE) või ignoreeritakse (FALSE). Tühikute puhul on see ebaoluline ja seetõttu jäetakse ära.

    Lisateavet leiate funktsioonist RegExpReplace.

    Kuidas eemaldada tühikuid regexiga - näited

    Kui funktsioon RegExpReplace on lisatud teie töövihikusse, siis tegeleme erinevate stsenaariumidega ükshaaval.

    Eemalda kõik tühikud regexi abil

    Kõigi tühikute eemaldamiseks stringist tuleb lihtsalt otsida kõiki tühikuid, sealhulgas tühikut, tabulaatorit, vagunitagastust ja reavahetusmärki, ning asendada need tühja stringiga ("").

    Muster : \s+

    Asendus : ""

    Eeldades, et lähtekriips on A5, on valem B5:

    =RegExpReplace(A5, "\s+", "")

    Et muuta mustrite haldamine lihtsamaks, võite sisestada regexi eelnevalt määratud lahtrisse ja esitada selle valemile absoluutse viite abil, näiteks $A$2, nii et lahtri aadress jääb muutumatuks, kui valemi kopeeritakse veerus alla.

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

    Eemaldage rohkem kui üks tühik

    Eemaldada täiendav tühik (st rohkem kui üks järjestikune tühik), kasutage sama regexi \s+, kuid asendage leitud vasted ühe tühikuga.

    Muster : \s+

    Asendus : " "

    =RegExpReplace(A5, "\s+", " ")

    Pöörake tähelepanu, et see valem jätab ühe tühiku mitte ainult sõnade vahele, vaid ka stringi algusesse ja lõppu, mis ei ole hea. Et vabaneda juhtivatest ja tagumistest tühikutest, pesitsege ülaltoodud valem teise RegExpReplace-funktsiooni, mis eemaldab tühikud algusest ja lõpust:

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

    Regex juhtivate ja tagumiste tühikute eemaldamiseks

    Kui soovite otsida tühikut rea alguses või lõpus, kasutage ankurdusi algus ^ ja lõpp $.

    Juhtiv tühik:

    Muster : ^[\s]+

    Jälgimine tühik:

    Muster : [\s]+$

    Juhtiv ja tagantjärele tühik:

    Muster : ^[\s]+

    Ükskõik, millise regexi te valite, asendage vasted mitte millegagi.

    Asendus : ""

    Näiteks selleks, et kõrvaldada kõik tühikud sümboli A5 alguses ja lõpus, on valem järgmine:

    =RegExpReplace(A5, "^[\s]+".

    Nagu on näidatud allpool oleval ekraanipildil, eemaldatakse ainult ees- ja tagantjärele jääv tühik. Sõnade vahelised tühikud jäävad alles, luues lugeja silmale visuaalselt meeldiva vaate.

    Eemaldage täiendavad tühikud, kuid säilitage reavahetused

    Kui töötate mitmerealiste stringidega, võite soovida vabaneda liigsetest tühikutest, kuid säilitada reavahetused. Selleks otsige tühikute \s asemel tühikuid [ ] või tühikuid ja tabulaatoreid [\t ]. Viimane muster on kasulik, kui teie lähteandmed on imporditud teisest allikast, nt tekstiredaktorist.

    Oletame, et soovite allpool esitatud andmestikus kärpida kõik ees- ja tagantjärele jäävad tühikud ning kõik tühikud peale ühe vahepealse tühiku, säilitades mitu rida. Selle ülesande täitmiseks vajate kahte erinevat RegExpReplace-funktsiooni.

    Esimene funktsioon asendab mitu tühikut ühe tühikuga.

    =RegExpReplace(A5, " +", " ")

    Teine eemaldab rea algusest ja lõpust tühikud:

    =RegExpReplace(A5, "^ +").

    Lihtsalt pesitsege need kaks funktsiooni üksteise sisse:

    =RegExpReplace(RegExpReplace(A5, " +", " "), "^ +

    Ja te saate täiusliku tulemuse:

    Regex mitme tühiku asendamiseks ühe märgiga

    Kui soovite eemaldada kõik tühikud stringist ja asendada iga järjestikuse tühikute rühma kindla märgiga, tuleb teha järgmist:

    Kõigepealt kasutage seda regexi juhtivate ja tagumiste tühikute eemaldamiseks:

    =RegExpReplace(A8, "^[\s]+".

    Seejärel serveeri ülaltoodud funktsiooni tekst teise RegExpReplace'i argument, mis asendab ühe või mitu järjestikust tühikut teie poolt määratud tähemärgiga, nt sidekriipsuga:

    Muster : \s+

    Asendus : -

    Eeldades, et lähtekriips on A8, võtab valem sellise kuju:

    =RegExpReplace(RegExpReplace(A8, "^[\s]+

    Või võite sisestada mustrid ja asendused eraldi lahtritesse, nagu on näidatud ekraanipildil:

    Regex tühjade ridade eemaldamiseks

    Siin on küsimus, mida kasutajad, kellel on ühes lahtris mitu rida, sageli küsivad: "Minu lahtrites on palju tühje ridu. Kas on võimalik neist vabaneda muul viisil kui iga lahtri läbimine ja iga rea käsitsi kustutamine?" Vastus: See on lihtne!

    Selleks, et sobitada tühje ridu, millel ei ole ühtegi märki praeguse rea algusest ^ kuni järgmise reani \n, on regex:

    Muster : ^\n

    Kui teie visuaalselt tühjad read sisaldavad tühikuid või tabulaatoreid, kasutage seda regulaaravaldist:

    Muster : ^[\t ]*\n

    Lihtsalt asendage regex tühja stringiga, kasutades seda valemit, ja kõik tühjad read kaovad korraga!

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

    Tühikute eemaldamine RegExi tööriistade abil

    Ülaltoodud näited on näidanud vaid väikest osa regexide pakutavatest imelistest võimalustest. Kahjuks ei ole VBAs saadaval kõik klassikaliste regulaaravaldiste funktsioonid.

    Õnneks on meie Ultimate Suite'iga kaasas olevad RegEx tööriistad vabad nendest piirangutest, kuna neid töötleb Microsofti .NET RegEx mootor. See võimaldab teil konstrueerida keerukamaid mustreid, mida VBA RegExp ei toeta. Allpool leiate näite sellise regulaaravaldise kohta.

    Regex numbrite vahelise tühiku eemaldamiseks

    Oletame, et soovite tähtnumbrilises stringis eemaldada ainult tühikuid numbrite vahelt, nii et stringist "A 1 2 B" saab "A 12 B".

    Kahe suvalise numbri vahel oleva tühiku sobitamiseks võite kasutada järgmisi võimalusi:

    Muster : (?<=\d)\s+(?=\d)

    Et luua valem, mis põhineb ülaltoodud regexidel, on siin kaks lihtsat sammu:

    1. On Ablebits andmed vahekaardil Tekst rühma, klõpsake Regex tööriistad .

    2. On Regex tööriistad paneel, valige lähteandmed, sisestage oma regex, valige Eemaldage ja vajutage Eemaldage .

      Et saada tulemusi valemite, mitte väärtustena, mäletage, et paneksite märkeruudu Sisesta valemina märkeruut.

    Kohe näete, et AblebitsRegexRemove funktsioon sisestatud uude veergu, mis asub algsetest andmetest paremal.

    Teise võimalusena võite sisestada regexi mõnda lahtrisse, näiteks A5, ja sisestada valemi otse lahtrisse, kasutades funktsiooni Sisestage funktsioon dialoogiboks, kus AblebitsRegexRemove on liigitatud kategooriasse AblebitsUDFs .

    Kuna see funktsioon on spetsiaalselt loodud stringide eemaldamiseks, vajab see ainult kahte argumenti - sisendstringi ja regexi:

    =AblebitsRegexRemove(A5, $A$2)

    See on, kuidas eemaldada tühikuid Excelis, kasutades regulaarseid väljendeid. Tänan teid lugemise eest ja ootan teid järgmisel nädalal meie blogis!

    Saadaolevad allalaadimised

    Tühiku eemaldamine regexiga - näited (.xlsm fail)

    Ultimate Suite - prooviversioon (.exe fail)

    Michael Brown on pühendunud tehnoloogia entusiast, kelle kirg on tarkvaratööriistade abil keerukate protsesside lihtsustamine. Rohkem kui kümneaastase kogemusega tehnoloogiatööstuses on ta lihvinud oma oskusi Microsoft Excelis ja Outlookis, samuti Google Sheetsis ja Docsis. Michaeli ajaveebi eesmärk on jagada oma teadmisi ja teadmisi teistega, pakkudes hõlpsasti järgitavaid näpunäiteid ja õpetusi tootlikkuse ja tõhususe parandamiseks. Olenemata sellest, kas olete kogenud professionaal või algaja, pakub Michaeli ajaveebi väärtuslikke teadmisi ja praktilisi nõuandeid nende oluliste tarkvaratööriistade maksimaalseks kasutamiseks.