Tabela e përmbajtjes
Në vargjet e mëposhtme, supozoni se dëshironi të fshini numrin e rendit të parë. Të gjithë këta numra fillojnë me shenjën hash (#) dhe përmbajnë saktësisht 5 shifra. Pra, ne mund t'i identifikojmë ato duke përdorur këtë regex:
Modeli : #\d{5}\b
Fjala kufi \b specifikon se një nënvarg që përputhet nuk mund të jetë pjesë e një vargu më të madh si p.sh. #10000001.
Për të hequr të gjitha ndeshjet, argumenti num_instance nuk është përcaktuar:
=RegExpReplace(A5, "#\d{5}\b", "")
Për të zhdukur vetëm ndodhinë e parë, ne vendosëm argumentin num_instance në 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex për të hequr disa karaktere
Për të hequr disa karaktere nga një varg, thjesht shkruani të gjitha karakteret e padëshiruara dhe ndani ato me një shirit vertikalsintaksë pa kufizime të VBA RegExp, dhe së dyti, nuk kërkon futjen e ndonjë kodi VBA në librat tuaj të punës pasi i gjithë integrimi i kodit bëhet nga ne në fund.
Pjesa juaj e punës është të ndërtoni një shprehje të rregullt dhe shërbeji në funksion :) Më lejoni t'ju tregoj se si ta bëni këtë në një shembull praktik.
Si të hiqni tekstin në kllapa dhe kllapa duke përdorur regex
Në vargjet e teksteve të gjata, informacione më pak të rëndësishme është mbyllur shpesh në [kllapa] dhe (kllapa). Si i hiqni ato detaje të parëndësishme duke mbajtur të gjitha të dhënat e tjera?
Në fakt, ne kemi ndërtuar tashmë një regex të ngjashëm për fshirjen e etiketave html, p.sh. tekstin brenda kllapave këndore. Natyrisht, të njëjtat metoda do të funksionojnë edhe për kllapa katrore dhe të rrumbullakëta.
Modeli : (\(.*?\))
A keni menduar ndonjëherë se sa i fuqishëm do të ishte Excel nëse dikush do ta pasuronte kutinë e veglave të tij me shprehje të rregullta? Ne jo vetëm që kemi menduar, por kemi punuar për të :) Dhe tani, ju mund ta shtoni këtë funksion të mrekullueshëm RegEx në librat tuaj të punës dhe të fshini nënvargjet që përputhen me një model në asnjë moment!
Javën e kaluar, ne shikuam se si të përdoren shprehjet e rregullta për të zëvendësuar vargjet në Excel. Për këtë, ne krijuam një funksion të personalizuar Regex Replace. Siç doli, funksioni shkon përtej përdorimit të tij kryesor dhe jo vetëm që mund të zëvendësojë vargjet, por edhe t'i heqë ato. Si mund të jetë kjo? Për sa i përket Excel, heqja e një vlere nuk është gjë tjetër veçse zëvendësimi i saj me një varg bosh, diçka në të cilën funksioni ynë Regex është shumë i mirë!
Funksioni VBA RegExp për të hequr nënvargjet në Excel
Siç e dimë të gjithë, shprehjet e rregullta nuk mbështeten në Excel si parazgjedhje. Për t'i aktivizuar ato, duhet të krijoni funksionin tuaj të përcaktuar nga përdoruesi. Lajmi i mirë është se një funksion i tillë tashmë është shkruar, testuar dhe gati për përdorim. Gjithçka që duhet të bëni është të kopjoni këtë kod, ta ngjisni në redaktuesin tuaj VBA dhe më pas ta ruani skedarin tuaj si një libër pune i aktivizuar me makro (.xlsm).
Funksioni ka sintaksën e mëposhtme:
RegExpReplace(tekst, model, zëvendësim, [numri_shembulli], [përputhja_rasti])Tre argumentet e para kërkohen, dy të fundit janë opsionale.
Ku:
- Tekst - vargu i tekstit për të kërkuarështë e mundur derisa të gjejë një kllapë mbyllëse.
Cilido model që zgjidhni, rezultati do të jetë absolutisht i njëjtë.
Për shembull, për të hequr të gjitha etiketat html nga një varg në A5 dhe për të lënë tekst, formula është:
=RegExpReplace(A5, "]*>", "")
Ose mund të përdorni kuantifikuesin dembel siç tregohet në pamjen e ekranit:
Kjo zgjidhje funksionon në mënyrë perfekte për tekst i vetëm (rreshtat 5 - 9). Për tekste të shumta (rreshtat 10 - 12), rezultatet janë të diskutueshme - tekstet nga etiketat e ndryshme bashkohen në një. A është kjo e saktë apo jo? Kam frikë, nuk është diçka që mund të vendoset lehtësisht - gjithçka varet nga kuptimi juaj për rezultatin e dëshiruar. Për shembull, në B11, pritet rezultati "A1"; ndërsa në B10, mund të dëshironi që "data1" dhe "data2" të ndahen me një hapësirë.
Për të hequr etiketat html dhe për të ndarë tekstet e mbetura me hapësira, mund të vazhdoni në këtë mënyrë:
<0 30> =RegExpReplace(A5, "]*>", " ")
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Rezultati do të duket diçka si kjo:
Ablebits Regex Remove Tool
Nëse keni pasur një shans për të përdorur Ultimate Suite për Excel, ndoshta keni zbuluar tashmë veglat e reja Regex të prezantuara me versionin e fundit. E bukura e këtyre funksioneve Regex të bazuara në .NET është se ato, së pari, mbështesin shprehjen e rregullt me funksione të plotaopsionin Hiq dhe shtypni Hiq .
Për të marrë rezultatet si formula, jo si vlera, zgjidhni kutinë e kontrollit Fut si formulë .
Për të hequr tekstin brenda kllapave nga vargjet në A2:A5, ne konfigurojmë cilësimet si më poshtë:
Si rezultat, funksioni AblebitsRegexRemove futet në një kolonë të re pranë të dhënave tuaja origjinale.
Funksioni gjithashtu mund të futet drejtpërdrejt në një qelizë nëpërmjet kutisë standarde të dialogut Fut Funksionin , ku kategorizohet nën AblebitsUDFs .
Meqë AblebitsRegexRemove është krijuar për të hequr tekstin, ai kërkon vetëm dy argumente - vargun burimor dhe regex. Të dy parametrat mund të përcaktohen drejtpërdrejt në një formulë ose të jepen në formën e referencave të qelizave. Nëse është e nevojshme, ky funksion i personalizuar mund të përdoret së bashku me çdo funksion origjinal.
Për shembull, për të shkurtuar hapësirat shtesë në vargjet që rezultojnë, mund të përdorni funksionin TRIM si një mbështjellës:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Kjo është se si të hiqni vargjet në Excel duke përdorur shprehje të rregullta. Ju falënderoj që lexoni dhe mezi pres t'ju shohim në blogun tonë javën tjetër!
Shkarkimet e disponueshme
Hiqni vargjet duke përdorur regex - shembuj (skedar .xlsm)
Ultimate Suite - versioni i provës (skedari .exe)
in.Për më shumë informacion, shikoni funksionin RegExpReplace.
Këshillë. Në raste të thjeshta, ju mund të hiqni karaktere ose fjalë specifike nga qelizat me formula Excel. Por shprehjet e rregullta ofrojnë shumë më tepër opsione për këtë.
Si të hiqni vargjet duke përdorur shprehje të rregullta - shembuj
Siç u përmend më lart, për të hequr pjesë të tekstit që përputhen me një model, duhet t'i zëvendësoni ato me një varg bosh. Pra, një formulë gjenerike merr këtë formë:
RegExpReplace(tekst, model, "", [numri_shembulli], [match_case])Shembujt e mëposhtëm tregojnë zbatime të ndryshme të këtij koncepti bazë.
Hiq të gjitha ndeshjet ose përputhjet specifike
Funksioni RegExpReplace është krijuar për të gjetur të gjitha nënvargjet që përputhen me një regex të caktuar. Cilat dukuri për t'u hequr kontrollohen nga argumenti i 4-të opsional, i quajtur numri_instance .
Paracaktimi është "të gjitha përputhen" - kur numri_instance operatori i lidhjes (&) dhe funksionet e tekstit si Djathtas, MID dhe LEFT.
Për shembull, për të shkruar të gjithë numrat e telefonit në formatin (123) 456-7890, formula është:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Ku B5 është dalja e funksionit RegExpReplace.
Hiqni karaktere speciale duke përdorur regex
Në një nga mësimet tona, ne shikuam se si të hiqni karakteret e padëshiruara në Excel duke përdorur funksione të integruara dhe të personalizuara. Shprehjet e rregullta i bëjnë gjërat shumë më të lehta! Në vend që të rendisni të gjithë karakteret për t'i fshirë, thjesht specifikoni ato që dëshironi të mbani :)
Modeli bazohet në klasat e karaktereve të mohuara - një kuti vendoset brenda një klase karakteresh [^ ] për të përputhur çdo karakter të vetëm JO në kllapa. Kuantifikuesi + e detyron atë t'i konsiderojë karakteret e njëpasnjëshme si një përputhje të vetme, në mënyrë që të bëhet një zëvendësim për një nënvarg që përputhet dhe jo për çdo karakter individual.
Në varësi të nevojave tuaja, zgjidhni një nga regjimet e mëposhtëm.
Për të hequr karakteret joalfanumerikë , d.m.th. të gjitha karakteret përveç shkronjave dhe shifrave:
Modeli : [^0-9a-zA-Z] +
Për të pastruar të gjithë karakteret përveç shkronjave , shifrave dhe hapësirave :
Modeli : [^0-9a-zA-Z ]+
Për të fshirë të gjitha karakteret përveç shkronjave , shifrave dhe nënvizave , mund të përdorni \ W që qëndron për çdo karakter që NUK është karakter alfanumerik osenënvizim:
Modeli : \W+
Nëse doni të mbani disa karaktere të tjera , p.sh. Shenjat e pikësimit, vendosini ato brenda kllapave.
Për shembull, për të hequr çdo karakter përveç shkronjës, shifrës, pikës, presjes ose hapësirës, përdorni regeksin e mëposhtëm:
Modeli : [^0-9a-zA-Z\., ]+
Kjo eliminon me sukses të gjithë karakteret speciale, por mbetet hapësira shtesë.
Për ta rregulluar këtë, mund të futni funksionin e mësipërm në një tjetër që zëvendëson hapësira të shumta me një karakter të vetëm hapësinor.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Ose thjesht përdorni funksionin vendas TRIM me të njëjtin efekt :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex për të hequr karakteret jo numerike
Për të fshirë të gjitha karakteret jo numerike nga një varg, mund të përdorni ose kjo formulë e gjatë ose një nga regjimet shumë të thjeshta të renditura më poshtë.
Përputhni çdo karakter që NUK është një shifër:
Modeli : \D+
Hiqni karakteret jonumerike duke përdorur klasa të mohuara:
Modeli : [^0-9]+
Modeli : [^\d] +
Këshillë. Nëse qëllimi juaj është të hiqni tekstin dhe të derdhni numrat e mbetur në qeliza të veçanta ose t'i vendosni të gjithë në një qelizë të ndarë me një kufizues të caktuar, atëherë përdorni funksionin RegExpExtract siç shpjegohet në Si të nxjerrim numrat nga vargu duke përdorur shprehje të rregullta.
Regex për të hequr çdo gjë pas hapësirës
Për të fshirë gjithçka pas një hapësire, përdorni ose hapësirën ( ) oseKarakteri i hapësirës së bardhë (\s) për të gjetur hapësirën e parë dhe .* për të përputhur çdo karakter pas tij.
Nëse keni vargje me një rresht që përmbajnë vetëm hapësira normale (vlera 32 në sistemin ASCII 7-bitësh) , nuk ka shumë rëndësi se cilin nga regjimet e mëposhtëm përdorni. Në rastin e vargjeve me shumë rreshta, ai bën një ndryshim.
Për të hequr çdo gjë pas një karakteri hapësinor , përdorni këtë regex:
Modeli : " .*"
=RegExpReplace(A5, " .*", "")
Kjo formulë do të heqë çdo gjë pas hapësirës së parë në çdo rresht . Që rezultatet të shfaqen në mënyrë korrekte, sigurohuni që të aktivizoni Wrap Text.
Për të hequr çdo gjë pas një hapësire të bardhë (duke përfshirë një hapësirë, skedë, kthim të karrocës dhe linjë të re), regex është:
Modeli : \s.*
=RegExpReplace(A5, "\s.*", "")
Sepse \s përputhet me disa lloje të ndryshme të hapësirave të bardha duke përfshirë një rresht të ri (\n), kjo formulë fshin gjithçka pas hapësirës së parë në një qelizë, pa marrë parasysh sa rreshta ka në të.
Regex për të hequr tekstin pas specifikave karakter
Duke përdorur metodat nga shembulli i mëparshëm, ju mund të zhdukni tekstin pas çdo karakteri që specifikoni.
Për të trajtuar secilën rresht veç e veç:
Model i përgjithshëm : char.*
Në vargjet me një rresht, kjo do të heqë gjithçka pas char . Në vargjet me shumë rreshta, çdo rresht do të përpunohet individualisht sepse në shijen VBA Regex, një pikë (.) përputhet me çdo karakter përveç një të rifillimi i një vargu ^, ne përputhim zero ose më shumë karaktere jo hapësinore [^ ]* që ndiqen menjëherë nga një ose më shumë hapësira " +". Pjesa e fundit shtohet për të parandaluar hapësirat e mundshme kryesore në rezultate.
Për të hequr tekstin përpara hapësirës së parë në çdo rresht, formula shkruhet në modalitetin e parazgjedhur "të gjitha ndeshjet" ( numri_shembull i hequr):
=RegExpReplace(A5, "^[^ ]* +", "")
Për të fshirë tekstin përpara hapësirës së parë në rreshtin e parë dhe për të lënë të paprekura të gjitha linjat e tjera, argumenti numri_instancës vendoset në 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex për të hequr çdo gjë përpara karakterit
Mënyra më e lehtë për të hequr të gjithë tekstin përpara një karakteri specifik është duke përdorur një regex si ky:
Model gjenerik : ^[^char]*char
Përkthyer në një gjuhë njerëzore, thotë: "që nga fillimi i një vargu të ankoruar nga ^ , përputhet me 0 ose më shumë karaktere përveç char [^char]* deri në shfaqjen e parë të char .
Për shembull, për të fshirë të gjithë tekstin përpara dy pikave të para , përdorni këtë shprehje të rregullt:
Modeli : ^[^:]*:
Për të shmangur hapësirat kryesore në rezultate, shtoni një karakter të hapësirës së bardhë \s* në fund. Kjo do të heqë gjithçka g përpara dy pikave të para dhe shkurto çdo hapësirë menjëherë pas saj:
Modeli : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Këshillë. Përveç shprehjeve të rregullta, Excel ka mjetet e veta për të hequr tekstin sipas pozicionit ose përputhjes. Për të mësuar se si të përmbushni detyrën me formulat vendase,ju lutemi shihni Si të hiqni tekstin para ose pas një karakteri në Excel.
Regex për të hequr çdo gjë përveç
Për të zhdukur të gjitha karakteret nga një varg përveç atyre që dëshironi të mbani, përdorni klasat e karaktereve të mohuara.
Për shembull, për të hequr të gjitha karakteret përveç shkronjave të vogla dhe pika, regex është:
Modeli : [^a-z\.]+
Në fakt, ne mund të bënim pa kuantifikuesin + këtu pasi funksioni ynë zëvendëson të gjitha gjetur ndeshje. Kuantifikuesi thjesht e bën atë pak më të shpejtë - në vend që të trajtoni çdo karakter individual, ju zëvendësoni një nënvarg.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex për të hequr etiketat html në Excel
Së pari, duhet theksuar se HTML nuk është një gjuhë e rregullt, kështu që analizimi i tij duke përdorur shprehje të rregullta nuk është mënyra më e mirë. Thënë kështu, regjimet mund të ndihmojnë padyshim që të heqin etiketat nga qelizat tuaja për ta bërë më të pastër grupin tuaj të të dhënave.
Duke pasur parasysh se etiketat html vendosen gjithmonë brenda kllapave këndore , mund t'i gjeni duke përdorur një nga regjimet e mëposhtëm.
Klasa e mohuar:
Modeli : ]*>
Këtu, ne përputhim një kllapë këndi të hapjes, e ndjekur nga zero ose më shumë dukuri të çdo karakteri përveç kllapa këndore e mbylljes [^>]* deri te kllapa këndore më e afërt e mbylljes.
Kërkimi dembel:
Modeli :
Këtu, ne përputhemi çdo gjë nga kllapa e parë e hapjes deri te kllapa e parë mbyllëse. Pikëpyetja detyron .* të përputhet me sa më pak karakterelinjë.
Për të përpunuar të gjitha rreshtat si një varg i vetëm:
Model gjenerik : char(.