Sadržaj
U niže navedenim nizovima, pretpostavimo da želite izbrisati prvi broj narudžbe. Svi takvi brojevi počinju heš znakom (#) i sadrže tačno 5 cifara. Dakle, možemo ih identificirati koristeći ovaj regex:
Uzorak : #\d{5}\b
Granica riječi \b specificira da odgovarajući podniz ne može biti dio većeg niza kao što je #10000001.
Da biste uklonili sva podudaranja, argument instance_num nije definiran:
=RegExpReplace(A5, "#\d{5}\b", "")
Da bismo iskorijenili samo prvo pojavljivanje, postavljamo argument instance_num na 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex za uklanjanje određenih znakova
Da biste uklonili određene znakove iz niza, samo zapišite sve neželjene znakove i odvojite ih okomitom trakomsintaksu bez VBA RegExp ograničenja, i drugo, ne zahtijeva umetanje bilo kakvog VBA koda u vaše radne knjige jer svu integraciju koda vršimo mi u pozadini.
Vaš dio posla je da konstruišete regularni izraz i poslužite ga funkciji :) Dozvolite mi da vam pokažem kako to učiniti na praktičnom primjeru.
Kako ukloniti tekst u zagradama i zagradama koristeći regex
U dugim tekstualnim nizovima, manje važne informacije je često zatvoren u [zagradama] i (zagradama). Kako ukloniti te nebitne detalje zadržavajući sve ostale podatke?
Zapravo, već smo napravili sličan regex za brisanje html oznaka, tj. teksta unutar ugaonih zagrada. Očigledno, iste metode će raditi i za uglaste i okrugle zagrade.
Uzorak : (\(.*?\))
Jeste li ikada pomislili koliko bi Excel moćan bio kada bi neko mogao obogatiti njegovu kutiju alata regularnim izrazima? Ne samo da smo razmišljali, već smo i radili na tome :) A sada, možete dodati ovu divnu RegEx funkciju u svoje radne sveske i izbrisati podnizove koji odgovaraju uzorku za kratko vrijeme!
Prošle sedmice smo pogledali o tome kako koristiti regularne izraze za zamjenu stringova u Excelu. Za ovo smo kreirali prilagođenu funkciju Regex Replace. Kako se ispostavilo, funkcija prevazilazi svoju primarnu upotrebu i ne samo da može zamijeniti nizove već ih i ukloniti. Kako je to moglo biti? U smislu Excela, uklanjanje vrijednosti nije ništa drugo nego zamjena sa praznim nizom, nešto u čemu je naša Regex funkcija vrlo dobra!
VBA RegExp funkcija za uklanjanje podnizova u Excelu
Kao što svi znamo, regularni izrazi nisu podržani u Excelu po defaultu. Da biste ih omogućili, morate kreirati vlastitu korisnički definiranu funkciju. Dobra vijest je da je takva funkcija već napisana, testirana i spremna za korištenje. Sve što treba da uradite je da kopirate ovaj kod, nalepite ga u svoj VBA editor, a zatim sačuvate datoteku kao radnu svesku sa omogućenom makronaredbom (.xlsm).
Funkcija ima sljedeća sintaksa:
RegExpReplace(tekst, uzorak, zamjena, [broj_instance], [match_case])Prva tri argumenta su obavezna, posljednja dva su opciona.
Gdje:
- Text - tekstualni niz za pretraživanjemoguće dok ne pronađe zagradu za zatvaranje.
Koji god uzorak da odaberete, rezultat će biti potpuno isti.
Na primjer, da uklonite sve html oznake iz niza u A5 i ostavite tekst, formula je:
=RegExpReplace(A5, "]*>", "")
Ili možete koristiti lijeni kvantifikator kao što je prikazano na snimku ekrana:
Ovo rješenje savršeno radi za pojedinačni tekst (redovi 5 - 9). Za više tekstova (redovi 10 - 12), rezultati su upitni - tekstovi iz različitih oznaka su spojeni u jedan. Da li je to tačno ili nije? Bojim se da se to ne može lako odlučiti – sve zavisi od vašeg razumijevanja željenog ishoda. Na primjer, u B11 se očekuje rezultat "A1"; dok u B10 možda želite da se "data1" i "data2" razdvoje razmakom.
Da biste uklonili html oznake i razdvojili preostale tekstove razmacima, možete nastaviti na ovaj način:
- Zamijenite oznake razmacima " ", a ne praznim nizovima:
=RegExpReplace(A5, "]*>", " ")
- Smanjite više razmaka na jedan znak razmaka:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Skratite početne i zadnje razmake:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Rezultat će izgledati otprilike ovako:
Alat za uklanjanje Ablebits Regex
Ako ste imali priliku koristiti naš Ultimate Suite for Excel, vjerojatno ste već otkrili nove Regex alate predstavljene s nedavnim izdanjem. Ljepota ovih Regex funkcija zasnovanih na .NET-u je u tome što one, prvo, podržavaju regularni izraz s punim mogućnostimaopciju Ukloni i pritisnite Ukloni .
Da biste dobili rezultate kao formule, a ne vrijednosti, potvrdite okvir Umetni kao formulu .
Da uklonimo tekst unutar zagrada iz nizova u A2:A5, konfiguriramo postavke kako slijedi:
Kao rezultat, funkcija AblebitsRegexRemove se umeće u novu kolonu pored vaših originalnih podataka.
Funkcija se također može unijeti direktno u ćeliju putem standardnog Insert Function dijaloškog okvira, gdje je kategorizirana pod AblebitsUDFs .
Kako je AblebitsRegexRemove dizajniran za uklanjanje teksta, zahtijeva samo dva argumenta - izvorni niz i regex. Oba parametra se mogu definirati direktno u formuli ili dati u obliku referenci ćelija. Ako je potrebno, ova prilagođena funkcija se može koristiti zajedno sa bilo kojom izvornom funkcijom.
Na primjer, da biste smanjili dodatne razmake u rezultirajućim nizovima, možete koristiti funkciju TRIM kao omotač:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Tako možete ukloniti nizove u Excelu koristeći regularne izraze. Zahvaljujem vam na čitanju i radujem se što ću vas vidjeti na našem blogu sljedeće sedmice!
Dostupna preuzimanja
Uklonite nizove koristeći regex - primjeri (.xlsm fajl)
Ultimate Suite - probna verzija (.exe fajl)
in.Za više informacija, pogledajte funkciju RegExpReplace.
Savjet. U jednostavnim slučajevima možete ukloniti određene znakove ili riječi iz ćelija pomoću Excel formula. Ali regularni izrazi pružaju mnogo više opcija za ovo.
Kako ukloniti nizove koristeći regularne izraze - primjeri
Kao što je gore spomenuto, da biste uklonili dijelove teksta koji odgovaraju uzorku, morate ih zamijeniti sa praznim nizom. Dakle, generička formula poprima ovaj oblik:
RegExpReplace(text, pattern, "", [instance_num], [match_case])Primjeri u nastavku pokazuju različite implementacije ovog osnovnog koncepta.
Ukloni sva podudaranja ili specifično podudaranje
Funkcija RegExpReplace je dizajnirana da pronađe sve podnizove koji odgovaraju datom regularnom izrazu. Koje pojave treba ukloniti kontrolira 4. opcijski argument, pod nazivom instance_num .
Podrazumevana vrijednost je "sva podudaranja" - kada je instance_num operator konkatenacije (&) i funkcije teksta kao što su DESNO, SREDINA i LIJEVO.
Na primjer, za pisanje svih telefonskih brojeva u formatu (123) 456-7890, formula je:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Gdje je B5 izlaz funkcije RegExpReplace.
Uklonite posebne znakove koristeći regex
U jednom od naših tutorijala, pogledali smo kako ukloniti neželjene znakove u Excelu koristeći ugrađene i prilagođene funkcije. Regularni izrazi čine stvari mnogo lakšim! Umjesto da navedete sve znakove za brisanje, samo navedite one koje želite zadržati :)
Šablon je baziran na negativnim klasama znakova - karet se stavlja unutar klase znakova [^ ] da odgovara bilo kojem pojedinačnom znaku NE u zagradama. Kvantifikator + ga prisiljava da uzastopne znakove smatra jednim podudaranjem, tako da se vrši zamjena za odgovarajući podniz, a ne za svaki pojedinačni znak.
U zavisnosti od vaših potreba, odaberite jedan od sljedećih regularnih izraza.
Da biste uklonili nealfanumeričke znakove, tj. sve znakove osim slova i cifara:
Obrazac : [^0-9a-zA-Z] +
Za brisanje svih znakova osim slova , cifara i razmaka :
Obrazac : [^0-9a-zA-Z ]+
Za brisanje svih znakova osim slova , cifara i podvlaka , možete koristiti \ W koji označava bilo koji znak koji NIJE alfanumerički znak ilidonja crta:
Obrazac : \W+
Ako želite zadržati neke druge znakove , npr. znakove interpunkcije, stavite ih u zagrade.
Na primjer, da uklonite bilo koji znak osim slova, cifre, tačke, zareza ili razmaka, koristite sljedeći regularni izraz:
Obrazac : [^0-9a-zA-Z\., ]+
Ovo uspješno eliminira sve specijalne znakove, ali ostaje dodatni razmak.
Da biste ovo popravili, možete ugnijezditi gornju funkciju u drugu koja zamjenjuje više razmaka jednim znakom za razmak.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Ili jednostavno koristite izvornu funkciju TRIM s istim efektom :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex za uklanjanje nenumeričkih znakova
Da obrišete sve nenumeričke znakove iz niza, možete koristiti ili ovu dugačku formulu ili jedan od vrlo jednostavnih regularnih izraza navedenih ispod.
Uparite bilo koji znak koji NIJE cifra:
Obrazac : \D+
Uklonite nenumeričke znakove koristeći negirane klase:
Uzorak : [^0-9]+
Uzorak : [^\d] +
Savjet. Ako je vaš cilj da uklonite tekst i razlijete preostale brojeve u zasebne ćelije ili ih sve smjestite u jednu ćeliju odvojenu određenim graničnikom, tada koristite funkciju RegExpExtract kao što je objašnjeno u Kako izdvojiti brojeve iz niza pomoću regularnih izraza.
Regex za uklanjanje svega nakon razmaka
Da obrišete sve nakon razmaka, koristite razmak ( ) ilirazmak (\s) znak za pronalaženje prvog razmaka i .* za podudaranje sa svim znakovima nakon njega.
Ako imate nizove od jednog reda koji sadrže samo normalne razmake (vrijednost 32 u 7-bitnom ASCII sistemu) , zapravo nije važno koji od donjih regularnih izraza koristite. U slučaju nizova u više redova, to čini razliku.
Da biste uklonili sve nakon razmaka , koristite ovaj regex:
Uzorak : " .*"
=RegExpReplace(A5, " .*", "")
Ova formula će ukloniti sve iza prvog razmaka u svakom redu . Da bi se rezultati ispravno prikazali, obavezno uključite Wrap Text.
Da biste uklonili sve nakon razmaka (uključujući razmak, tabulator, povratak i novi red), regularni izraz je:
Obrazac : \s.*
=RegExpReplace(A5, "\s.*", "")
Zato što \s odgovara nekoliko različitih tipova razmaka uključujući novi red (\n), ova formula briše sve nakon prvog razmaka u ćeliji, bez obzira koliko linija ima u njoj.
Regeks za uklanjanje teksta nakon određenog character
Koristeći metode iz prethodnog primjera, možete izbrisati tekst nakon bilo kojeg znaka koji navedete.
Za rukovanje svakim redom zasebno:
Generički obrazac : char.*
U nizovima od jednog reda, ovo će ukloniti sve nakon char . U nizovima sa više redova, svaki red će se obraditi pojedinačno jer u VBA Regex ukusu tačka (.) odgovara bilo kojem znaku osim novogpočetak stringa ^, podudaramo nula ili više znakova bez razmaka [^ ]* koji su odmah praćeni jednim ili više razmaka " +". Zadnji dio je dodan kako bi se spriječili potencijalni vodeći razmaci u rezultatima.
Da biste uklonili tekst prije prvog razmaka u svakom retku, formula se piše u zadanom načinu "sva podudaranja" ( broj_instance izostavljeno):
=RegExpReplace(A5, "^[^ ]* +", "")
Da biste izbrisali tekst prije prvog razmaka u prvom redu i ostavili sve ostale redove netaknutim, argument instance_num je postavljen na 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regeks za uklanjanje svega prije znaka
Najlakši način da uklonite sav tekst prije određenog znaka je korištenjem redovnog izraza ovako:
Generički obrazac : ^[^char]*char
Prevedeno na ljudski jezik, kaže: "od početka niza koji je usidren pomoću ^ , odgovara 0 ili više znakova osim char [^char]* do prvog pojavljivanja char .
Na primjer, da obrišete sav tekst prije prve dvotačke , koristite ovaj regularni izraz:
Obrazac : ^[^:]*:
Da biste izbjegli vodeći razmaci u rezultatima, dodajte razmak \s* u Ovo će ukloniti sve g prije prvog dvotočka i odrežite sve razmake odmah nakon njega:
Obrazac : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Savjet. Osim regularnih izraza, Excel ima vlastita sredstva za uklanjanje teksta po poziciji ili podudaranju. Da naučite kako izvršiti zadatak s izvornim formulama,pogledajte Kako ukloniti tekst prije ili poslije znaka u Excelu.
Regex za uklanjanje svega osim
Da biste iskorijenili sve znakove iz niza osim onih koje želite zadržati, koristite negirane klase znakova.
Na primjer, da uklonite sve znakove osim malih slova i tačke, regex je:
Uzorak : [^a-z\.]+
U stvari, mogli bismo bez kvantifikatora + ovdje jer naša funkcija zamjenjuje sve pronađena podudaranja. Kvantifikator ga samo čini malo bržim - umjesto rukovanja svakim pojedinačnim znakom, zamjenjujete podniz.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex za uklanjanje html oznaka u Excelu
Prvo, treba napomenuti da HTML nije regularan jezik, tako da njegovo raščlanjivanje pomoću regularnih izraza nije najbolji način. Uz to, regeksi definitivno mogu pomoći u uklanjanju oznaka iz vaših ćelija kako bi vaš skup podataka bio čišći.
S obzirom da su html oznake uvijek smještene unutar ugaonih zagrada, možete ih pronaći pomoću jednog od sljedećih regularnih izraza.
Negirana klasa:
Uzorak : ]*>
Ovdje se podudaraju ugaone zagrade, praćene nula ili više pojavljivanja bilo kojeg znaka osim ugaona zagrada zatvaranja [^>]* do najbliže zagrade za ugao zatvaranja.
Lazna pretraga:
Uzorak :
Ovdje se podudaramo bilo šta od prve zagrade za otvaranje do prve zagrade za zatvaranje. Znak pitanja prisiljava .* da odgovara što manje znakovalinija.
Za obradu svih redova kao jednog stringa:
Generički obrazac : char(.