Obsah
Chcete čo najefektívnejšie pracovať s bielymi medzerami? Pomocou regulárnych výrazov môžete odstrániť všetky medzery v bunke, nahradiť viacero medzier jedným znakom, orezať medzery len medzi číslami a podobne.
Bez ohľadu na to, aké vstupné údaje používate, sotva sa stretnete so súborom údajov bez medzier. Vo väčšine prípadov sú biele miesta dobré - používate ich na vizuálne oddelenie rôznych informácií, aby ste ich ľahšie vnímali. V niektorých situáciách sa však môžu stať zlom - ďalšie medzery môžu pokaziť vaše vzorce a urobiť pracovné hárky takmer nezvládnuteľnými.
Prečo používať regulárny výraz na orezávanie bielych znakov v programe Excel?
Skôr než sa pustíme do podrobností používania regulárnych výrazov na odstraňovanie bielych znakov v pracovných listoch programu Excel, rád by som sa venoval otázke, ktorá nás napadne ako prvá - prečo potrebujeme regexy, keď už Excel má funkciu TRIM?
Aby ste pochopili rozdiel, pozrime sa, čo sa v jednotlivých prípadoch považuje za biele znaky:
- Zabudovaná funkcia TRIM dokáže odstrániť iba priestorový znak ktorý má v 7-bitovom systéme ASCII hodnotu 32.
- Regulárne výrazy dokážu identifikovať niekoľko rôznych foriem bielych znakov, ako sú medzera ( ), tabulátor (\t), návrat vozíka (\r) a nový riadok (\n). biely znak (\s), ktorý zodpovedá všetkým týmto typom a je mimoriadne užitočný pri čistení nespracovaných vstupných údajov.
Ak presne viete, čo sa deje v zákulisí, je oveľa jednoduchšie nájsť riešenie, však?
Ako povoliť regulárne výrazy v programe Excel
Je všeobecne známe, že hotový Excel nepodporuje regulárne výrazy. Ak ich chcete aktivovať, musíte vytvoriť vlastnú funkciu VBA. Našťastie už jednu máme, s názvom RegExpReplace Počkajte, prečo "nahradiť", keď hovoríme o odstránení? V jazyku Excelu je "odstrániť" len iný výraz pre "nahradiť prázdnym reťazcom" :)
Ak chcete pridať funkciu do programu Excel, skopírujte jej kód z tejto stránky, vložte ho do editora VBA a uložte súbor ako zošit s povolenými makrami (.xlsm).
Tu je syntax funkcie pre vašu potrebu:
RegExpReplace(text, vzor, náhrada, [číslo_inštancie], [prípad_zhody])Prvé tri argumenty sú povinné, posledné dva sú nepovinné.
Kde:
- Text - pôvodný reťazec, v ktorom sa má vyhľadávať.
- Vzor - regex na vyhľadávanie.
- Náhrada - text, ktorý sa má nahradiť. Na odstrániť biele miesta , nastavíte tento argument na:
- prázdny reťazec ("") na orezanie úplne všetkých medzier
- priestor znak (" ") na nahradenie viacerých medzier jedným znakom medzery
- Instance_num (nepovinné) - číslo inštancie. Vo väčšine prípadov ho vynecháte, ak chcete nahradiť všetky inštancie (predvolené).
- Match_case (nepovinné) - logická hodnota, ktorá určuje, či sa majú porovnať (TRUE) alebo ignorovať (FALSE) veľké a malé písmená textu. Pre biele znaky je irelevantná, a preto sa vynecháva.
Viac informácií nájdete v časti Funkcia RegExpReplace.
Ako odstrániť biele znaky pomocou regexu - príklady
Po pridaní funkcie RegExpReplace do zošita sa poďme postupne venovať rôznym scenárom.
Odstránenie všetkých bielych znakov pomocou regexu
Ak chcete odstrániť všetky medzery v reťazci, jednoducho vyhľadajte ľubovoľný biely znak vrátane medzery, tabulátora, návratu vozíka a podania riadku a nahraďte ich prázdnym reťazcom ("").
Vzor : \s+
Náhrada : ""
Za predpokladu, že zdrojový reťazec je v A5, vzorec v B5 je:
=RegExpReplace(A5, "\s+", "")
Aby ste si uľahčili správu vzorov, môžete regex zadať do preddefinovanej bunky a dodať ho do vzorca pomocou absolútneho odkazu, napríklad $A$2, takže adresa bunky zostane pri kopírovaní vzorca do stĺpca nezmenená.
=RegExpReplace(A5, $A$2, "")
Odstránenie viac ako jedného bieleho miesta
Odstránenie ďalšie biele znaky (t. j. viac ako jedna po sebe idúca medzera), použite rovnaký regex \s+, ale nájdenú zhodu nahraďte jedným znakom medzery.
Vzor : \s+
Náhrada : " "
=RegExpReplace(A5, "\s+", " ")
Dávajte pozor na to, že tento vzorec ponecháva jeden znak medzery nielen medzi slovami, ale aj na začiatku a na konci reťazca, čo nie je dobré. Ak sa chcete zbaviť úvodných a koncových bielych znakov, vnorte vyššie uvedený vzorec do inej funkcie RegExpReplace, ktorá odstráni medzery zo začiatku a konca:
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+
Regex na odstránenie začiatočných a koncových bielych znakov
Ak chcete vyhľadať biele znaky na začiatku alebo na konci riadku, použite kotvy na začiatku ^ a na konci $.
Vedúci biele miesta:
Vzor : ^[\s]+
Vlečka biele miesta:
Vzor : [\s]+$
Vedúci a koncové biele miesta:
Vzor : ^[\s]+
Bez ohľadu na to, aký regex si vyberiete, nenahrádzajte zhody ničím.
Náhrada : ""
Napríklad na odstránenie všetkých medzier na začiatku a na konci reťazca v A5 sa použije vzorec:
=RegExpReplace(A5, "^[\s]+
Ako je znázornené na snímke nižšie, odstránia sa len úvodné a koncové biele znaky. Medzery medzi slovami zostanú nedotknuté a vytvoria vizuálne príjemný pohľad pre oko čitateľa.
Odstránenie ďalších bielych znakov, ale zachovanie zalomenia riadkov
Pri práci s viacriadkovými reťazcami sa môžete chcieť zbaviť dodatočných medzier, ale zachovať zalomenie riadkov. Ak to chcete urobiť, namiesto znaku bielych znakov \s hľadajte medzery [ ] alebo medzery a tabulátory [\t ]. Posledný vzor sa hodí, keď sú zdrojové údaje importované z iného zdroja, napr. z textového editora.
Predpokladajme, že v nižšie uvedenom súbore údajov chcete orezať všetky úvodné/koncové medzery a všetky medzery okrem jednej, pričom viaceré riadky zostanú nedotknuté. Na splnenie tejto úlohy budete potrebovať dve rôzne funkcie RegExpReplace.
Prvá funkcia nahrádza viacero medzier jedným znakom medzery.
=RegExpReplace(A5, " +", " ")
Druhý odstraňuje medzery zo začiatku a konca riadku:
=RegExpReplace(A5, "^ +
Stačí vložiť tieto dve funkcie jednu do druhej:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +
A dosiahnete dokonalý výsledok:
Regex na nahradenie viacerých medzier jedným znakom
Ak chcete z reťazca odstrániť všetky medzery a nahradiť každú skupinu po sebe idúcich medzier konkrétnym znakom, musíte urobiť toto:
Najprv použite tento regex na orezanie úvodných a končiacich bielych znakov:
=RegExpReplace(A8, "^[\s]+
Potom vykonajte vyššie uvedenú funkciu pre text argument iného RegExpReplace, ktorý nahradí jeden alebo viac po sebe idúcich bielych znakov zadaným znakom, napr. pomlčkou:
Vzor : \s+
Náhrada : -
Za predpokladu, že zdrojový reťazec je v A8, vzorec má tento tvar:
=RegExpReplace(RegExpReplace(A8, "^[\s]+
Alebo môžete vzory a náhrady zadať do samostatných buniek, ako je znázornené na snímke:
Regex na odstránenie prázdnych riadkov
Tu je otázka, ktorú často kladú používatelia, ktorí majú v jednej bunke viacero riadkov: "V mojich bunkách je veľa prázdnych riadkov. Je nejaký iný spôsob, ako sa ich zbaviť, než prejsť každú bunku a odstrániť každý riadok ručne?" Odpoveď: Je to jednoduché!
Na porovnanie prázdnych riadkov, ktoré neobsahujú ani jeden znak od začiatku ^ aktuálneho riadku až po nasledujúci riadok \n, sa použije regex:
Vzor : ^\n
Ak vaše vizuálne prázdne riadky obsahujú medzery alebo tabulátory, použite tento regulárny výraz:
Vzor : ^[\t ]*\n
Stačí nahradiť regex prázdnym reťazcom pomocou tohto vzorca a všetky prázdne riadky budú naraz preč!
=RegExpReplace(A5, $A$2, "")
Odstránenie bielych znakov pomocou nástrojov RegEx
Vyššie uvedené príklady demonštrovali len malú časť úžasných možností, ktoré regexy poskytujú. Bohužiaľ, nie všetky funkcie klasických regulárnych výrazov sú dostupné vo VBA.
Našťastie nástroje RegEx, ktoré sú súčasťou našej sady Ultimate Suite, sú bez týchto obmedzení, pretože ich spracúva engine RegEx spoločnosti Microsoft .NET. To vám umožňuje vytvárať zložitejšie vzory, ktoré nie sú podporované nástrojom RegExp VBA. Nižšie nájdete príklad takéhoto regulárneho výrazu.
Regex na odstránenie medzery medzi číslami
Predpokladajme, že v alfanumerickom reťazci chcete odstrániť biele znaky len medzi číslami, takže z reťazca "A 1 2 B" sa stane "A 12 B".
Na porovnanie bielych znakov medzi ľubovoľnými dvoma číslicami môžete použiť nasledujúce obchádzanie:
Vzor : (?<=\d)\s+(?=\d)
Ak chcete vytvoriť vzorec na základe vyššie uvedených regexov, vykonajte dva jednoduché kroky:
- Na Údaje Ablebits na karte Text kliknite na položku Nástroje Regex .
- Na Nástroje Regex vyberte zdrojové údaje, zadajte regex, vyberte Odstránenie stránky a stlačte tlačidlo Odstránenie stránky .
Ak chcete získať výsledky ako vzorce, nie ako hodnoty, nezabudnite zaškrtnúť políčko Vložiť ako vzorec začiarkavacie políčko.
O chvíľu uvidíte AblebitsRegexRemove vložené do nového stĺpca napravo od pôvodných údajov.
Prípadne môžete regex zadať do niektorej bunky, napríklad A5, a vzorec vložiť priamo do bunky pomocou Vložiť funkciu dialógové okno, v ktorom AblebitsRegexRemove je zaradená do kategórie AblebitsUDFs .
Keďže táto funkcia je špeciálne navrhnutá na odstraňovanie reťazcov, vyžaduje len dva argumenty - vstupný reťazec a regex:
=AblebitsRegexRemove(A5, $A$2)
Takto sa odstraňujú medzery v programe Excel pomocou regulárnych výrazov. Ďakujem vám za prečítanie a teším sa na vás na našom blogu budúci týždeň!
Dostupné súbory na stiahnutie
Odstránenie bielych znakov pomocou regexu - príklady (.xlsm súbor)
Ultimate Suite - skúšobná verzia (.exe súbor)