Ynhâldsopjefte
Stel yn 'e ûndersteande stringen dat jo it earste folchoardernûmer wiskje wolle. Al sokke sifers begjinne mei it hash-teken (#) en befetsje krekt 5 sifers. Sa kinne wy se identifisearje mei dizze regex:
Patroan : #\d{5}\b
De wurdgrins \b spesifisearret dat in oerienkommende substring net wêze kin diel fan in gruttere tekenrige lykas #10000001.
Om alle oerienkomsten te ferwiderjen, is it argumint instance_num net definiearre:
=RegExpReplace(A5, "#\d{5}\b", "")
Om allinich it earste foarkommen te ferwiderjen, sette wy it instance_num argumint op 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex om bepaalde tekens te ferwiderjen
Om bepaalde karakters fan in tekenrige te strippen, skriuw gewoan alle net winske tekens op en skied se mei in fertikale balkesyntaksis frij fan VBA RegExp beheinings, en twad, net nedich ynfoegje gjin VBA koade yn jo wurkboeken as alle koade yntegraasje wurdt dien troch ús by de efterkant.
Jo diel fan 'e baan is it bouwen fan in reguliere ekspresje en tsjinje it oan de funksje :) Lit my jo sjen litte hoe't jo dat dwaan kinne op in praktysk foarbyld.
Hoe tekst tusken heakjes en haakjes fuortsmite mei regex
Yn lange tekststrings, minder wichtige ynformaasje wurdt faak ynsletten tusken [heakjes] en (haakjes). Hoe ferwiderje jo dy irrelevante details troch alle oare gegevens te behâlden?
Yn feite hawwe wy al in ferlykbere regex boud foar it wiskjen fan html-tags, dus tekst binnen hoekhaken. Fansels sille deselde metoaden ek wurkje foar fjouwerkante en rûne heakjes.
Patroan : (\(.*?\))
Hawwe jo oait tocht hoe machtich Excel soe wêze as immen syn arkkiste koe ferrykje mei reguliere útdrukkingen? Wy hawwe der net allinnich tocht, mar ek oan wurke :) En no kinne jo dizze prachtige RegEx-funksje tafoegje oan jo eigen wurkboeken en substrings wiskje dy't oerienkomme mei in patroan yn gjin tiid!
Ferline wike hawwe wy sjoen oer hoe't jo reguliere útdrukkingen brûke om snaren yn Excel te ferfangen. Hjirfoar hawwe wy in oanpaste Regex Replace-funksje makke. As it die bliken, giet de funksje fierder as syn primêre gebrûk en kin net allinich snaren ferfange, mar se ek fuortsmite. Hoe koe dat? Wat Excel oanbelanget, is it fuortsmiten fan in wearde neat oars as it ferfangen troch in lege tekenrige, eat dêr't ús Regex-funksje tige goed yn is!
VBA RegExp-funksje om substrings yn Excel te ferwiderjen
Lykas wy allegear witte, wurde reguliere útdrukkingen standert net stipe yn Excel. Om se yn te skeakeljen, moatte jo jo eigen brûker-definieare funksje oanmeitsje. It goede nijs is dat sa'n funksje al is skreaun, hifke en klear foar gebrûk. Alles wat jo hoege te dwaan is dizze koade te kopiearjen, yn jo VBA-bewurker te plakjen en jo bestân dan op te slaan as in macro-ynskeakele wurkboek (.xlsm).
De funksje hat de folgjende syntaksis:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])De earste trije arguminten binne ferplicht, de lêste twa binne opsjoneel.
Wêr:
- Tekst - de tekststring om te sykjenmooglik oant it in slutende beugel fynt.
Hokker patroan jo ek kieze, it resultaat sil absolút itselde wêze.
Bygelyks, om alle html-tags fan in tekenrige yn A5 te ferwiderjen en tekst te litten, de formule is:
=RegExpReplace(A5, "]*>", "")
Of jo kinne de luie kwantifier brûke lykas werjûn yn 'e skermôfbylding:
Dizze oplossing wurket perfekt foar inkele tekst (rige 5 - 9). Foar meardere teksten (rige 10 - 12) binne de resultaten twifelich - teksten fan ferskate tags wurde gearfoege ta ien. Is dit korrekt of net? Ik bin bang, it is net wat dat maklik kin wurde besletten - alles hinget ôf fan jo begryp fan 'e winske útkomst. Bygelyks, yn B11 wurdt it resultaat "A1" ferwachte; wylst yn B10 jo miskien wolle dat "data1" en "data2" skieden wurde mei in spaasje.
Om html-tags te ferwiderjen en de oerbleaune teksten te skieden mei spaasjes, kinne jo op dizze manier trochgean:
- Ferfange tags mei spaasjes " ", net lege tekenrige:
=RegExpReplace(A5, "]*>", " ")
- Ferminderje meardere spaasjes ta ien spaasje karakter:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Trim liedende en efterste spaasjes:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
It resultaat sil der sa útsjen:
Ablebits Regex Remove Tool
As jo in kâns hawwe hân om ús Ultimate Suite foar Excel te brûken, hawwe jo wierskynlik al de nije Regex-ark ûntdutsen yntrodusearre mei de resinte release. De skientme fan dizze .NET basearre Regex-funksjes is dat se, as earste, folsleine reguliere ekspresje stypjede Fuortsmite opsje, en klik op Fuortsmite .
Om de resultaten as formules te krijen, net as wearden, selektearje it karfakje Ynfoegje as formule .
Om tekst tusken heakjes te ferwiderjen fan strings yn A2:A5, konfigurearje wy de ynstellings as folget:
As resultaat wurdt de funksje AblebitsRegexRemove yn in nije kolom ynfoege neist jo oarspronklike gegevens.
De funksje kin ek direkt yn in sel ynfierd wurde fia it standert dialoochfinster Funksje ynfoegje , wêr't it is yndield ûnder AblebitsUDFs .
Om't AblebitsRegexRemove ûntworpen is om tekst te ferwiderjen, fereasket it mar twa arguminten - de boarnestring en regex. Beide parameters kinne direkt wurde definieare yn in formule of levere yn 'e foarm fan selferwizings. As it nedich is, kin dizze oanpaste funksje tegearre mei alle lânseigen brûkt wurde.
Bygelyks, om ekstra spaasjes yn 'e resultearjende strings te trimmen, kinne jo de TRIM-funksje brûke as omslach:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Sa kinne jo stringen yn Excel fuortsmite mei reguliere útdrukkingen. Ik tankje jo foar it lêzen en sjoch út nei jo te sjen op ús blog nije wike!
Beskikbere downloads
Stringen fuortsmite mei regex - foarbylden (.xlsm-bestân)
Ultimate Suite - proefferzje (.exe-bestân)
in.Foar mear ynformaasje, sjoch asjebleaft RegExpReplace-funksje.
Tip. Yn ienfâldige gefallen kinne jo spesifike tekens of wurden fuortsmite fan sellen mei Excel-formules. Mar reguliere útdrukkingen jouwe hjir folle mear mooglikheden foar.
Hoe kinne jo stringen fuortsmite mei help fan reguliere útdrukkingen - foarbylden
Lykas hjirboppe neamde, om dielen fan tekst te ferwiderjen dy't oerienkomme mei in patroan, moatte jo se ferfange mei in lege string. Dus, in generyske formule nimt dizze foarm oan:
RegExpReplace(tekst, patroan, "", [instance_num], [match_case])De ûndersteande foarbylden litte ferskate ymplemintaasjes fan dit basiskonsept sjen.
Fuortsmite alle oerienkomsten of spesifike oerienkomst
De funksje RegExpReplace is ûntworpen om alle substrings te finen dy't oerienkomme mei in opjûne regex. Hokker foarfallen te ferwiderjen wurdt regele troch it 4e opsjonele argumint, neamd instance_num .
De standert is "alle oerienkomsten" - as de instance_num ferbiningsoperator (&) en Tekstfunksjes lykas RIGHT, MID en LEFT.
Om bygelyks alle telefoannûmers yn it (123) 456-7890-formaat te skriuwen, is de formule:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Dêr't B5 de útfier is fan 'e RegExpReplace-funksje.
Spesiale tekens fuortsmite mei regex
Yn ien fan ús tutorials, wy seagen hoe't jo net winske karakters yn Excel kinne ferwiderje mei ynboude en oanpaste funksjes. Reguliere útdrukkingen meitsje dingen in stik makliker! Ynstee fan alle tekens dy't jo wolle wiskje opjaan, spesifisearje gewoan dejingen dy't jo wolle bewarje :)
It patroan is basearre op negearre karakterklassen - in karet wurdt yn in karakterklasse set [^ ] om oerien te kommen mei ien inkeld karakter NET tusken heakjes. De + kwantifier twingt it om opienfolgjende karakters as ien wedstryd te beskôgjen, sadat in ferfanging dien wurdt foar in oerienkommende substring ynstee fan foar elk yndividueel karakter.
Ofhinklik fan jo behoeften, kies ien fan 'e folgjende regeksen.
Om net-alfanumerike tekens te ferwiderjen, dus alle tekens útsein letters en sifers:
Patroan : [^0-9a-zA-Z] +
Om alle tekens útsein letters , sifers en spaasjes te wiskjen:
Patroan : [^0-9a-zA-Z ]+
Om alle tekens útsein letters , sifers en underscore te wiskjen, kinne jo \ W dat stiet foar elk karakter dat is NET alfanumerike karakter ofunderscore:
Patroan : \W+
As jo wat oare tekens hâlde wolle , bgl. ynterpunksjetekens, set se binnen de heakjes.
Bygelyks, om elk karakter oars dan in letter, sifer, punt, komma of spaasje ôf te stripjen, brûk de folgjende regex:
Patroan : [^0-9a-zA-Z\., ]+
Dit elimineert alle spesjale tekens mei súkses, mar ekstra wite romte bliuwt.
Om dit te reparearjen, kinne jo de boppesteande funksje yn in oare nêste dy't meardere spaasjes ferfangt mei ien spaasjekarakter.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Of gewoan de eigen TRIM-funksje brûke mei itselde effekt :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex om net-numerike tekens te ferwiderjen
Om alle net-numerike tekens fan in tekenrige te wiskjen, kinne jo gebrûk meitsje fan of dizze lange formule of ien fan de hiel ienfâldige regexes hjirûnder.
Kom oerien mei elk karakter dat GEEN sifer is:
Patroan : \D+
Strip net-numerike tekens mei negearre klassen:
Patroan : [^0-9]+
Patroan : [^\d] +
Tip. As jo doel is om tekst te ferwiderjen en de oerbleaune nûmers yn aparte sellen te spieljen of se allegear yn ien sel te pleatsen skieden mei in spesifisearre delimiter, brûk dan de RegExpExtract-funksje lykas útlein yn Hoe kinne sifers út string ekstrahearje mei reguliere útdrukkingen.
Regex om alles nei spaasje te ferwiderjen
Om alles nei in spaasje te wiskjen, brûk dan de spaasje ( ) ofwhitespace (\s) karakter om de earste spaasje te finen en .* om alle karakters dêrnei te passen.
As jo ienregelige tekenrige hawwe dy't allinich normale spaasjes befetsje (wearde 32 yn it 7-bit ASCII-systeem) , makket it net echt út hokker fan 'e ûndersteande regexes jo brûke. Yn gefal fan snaren mei meardere rigels makket it wol in ferskil.
Om alles nei in spaasjeteken te ferwiderjen, brûk dizze regex:
Patroan : " .*"
=RegExpReplace(A5, " .*", "")
Dizze formule sil alles strippe nei de earste spaasje yn elke rigel . Foardat de resultaten goed werjûn wurde, wês wis dat jo Wrap Text ynskeakelje.
Om alles nei in wite spaasje (ynklusyf in spaasje, ljepper, koetsreturn en nije rigel) te strippen, de regex is:
Patroan : \s.*
=RegExpReplace(A5, "\s.*", "")
Om't \s oerienkomt mei in pear ferskillende wite romtetypen ynklusyf in nije rigel (\n), dizze formule wisket alles nei de earste spaasje yn in sel, nettsjinsteande hoefolle rigels der yn sitte.
Regex om tekst te ferwiderjen nei spesifike karakter
Mei de metoaden fan it foarige foarbyld kinne jo tekst nei elk karakter dat jo oantsjutte fuortsmite.
Om elke rigel apart te behanneljen:
Generic pattern : char.*
Yn ien-line-strings sil dit alles fuortsmite nei char . Yn snaren mei meardere rigels sil elke rigel yndividueel wurde ferwurke, om't yn 'e VBA Regex-smaak in perioade (.) oerienkomt mei elk karakter útsein in nijbegjin fan in tekenrige ^, komme wy oerien mei nul of mear net-spaasjetekens [^ ]* dy't direkt folge wurde troch ien of mear spaasjes " +". It lêste diel wurdt tafoege om potinsjele liedende spaasjes yn 'e resultaten te foarkommen.
Om tekst foar earste spaasje yn elke rigel te ferwiderjen, wurdt de formule skreaun yn 'e standert "alle oerienkomsten" modus ( instance_num omitted):
=RegExpReplace(A5, "^[^ ]* +", "")
Om tekst foar de earste spaasje yn 'e earste rigel te wiskjen, en alle oare rigels yntakt te litten, wurdt it argumint instance_num ynsteld op 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex om alles foar karakter ôf te stripen
De maklikste manier om alle tekst foar in spesifyk karakter te ferwiderjen is troch in regex te brûken lykas dit:
Algemien patroan : ^[^char]*char
Oersetten yn in minsklike taal, stiet der: "fan it begjin fan in tekenrige ferankere troch ^ , oerien mei 0 of mear tekens útsein char [^char]* oant it earste foarkommen fan char .
Bygelyks om alle tekst foar de earste kolon te wiskjen , brûk dizze reguliere ekspresje:
Patroan : ^[^:]*:
Om foaroansteande spaasjes yn 'e resultaten te foarkommen, foegje in wytromtekarakter \s* ta oan de end. Dit sil fuortsmite alles g foar de earste kolon en trim alle spaasjes rjochts dêrnei:
Patroan : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Tip. Njonken reguliere útdrukkingen hat Excel syn eigen middels om tekst te ferwiderjen op posysje of oerienkomst. Om te learen hoe't jo de taak kinne útfiere mei native formules,sjoch asjebleaft Hoe tekst te ferwiderjen foar of nei in karakter yn Excel.
Regex om alles te ferwiderjen, útsein
Om alle tekens út in tekenrige te wiskjen, útsein dejingen dy't jo behâlde wolle, brûk negearre karakterklassen.
Bygelyks om alle tekens te ferwiderjen útsein lytse letters en punten, de regex is:
Patroan : [^a-z\.]+
Eins kinne wy hjir sûnder de + kwantifier dwaan, om't ús funksje alles ferfangt fûn wedstriden. De kwantifier makket it gewoan wat flugger - ynstee fan elk yndividueel karakter te behanneljen, ferfange jo in substring.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex om html-tags yn Excel te ferwiderjen
Earst moat opmurken wurde dat HTML gjin reguliere taal is, dus it parsearjen mei reguliere útdrukkingen is net de bêste manier. Dat sei, regexes kinne perfoarst helpe om tags út jo sellen te strippen om jo dataset skjinner te meitsjen.
Sjoen dat html-tags altyd binnen hoekheakjes pleatst wurde, kinne jo se fine mei ien fan 'e folgjende regexes.
Negated klasse:
Patroan : ]*>
Hjir passe wy in iepeningshoekbeugel, folge troch nul of mear foarkommen fan elk karakter útsein de slutingshoekbeugel [^>]* oant de tichtstbye slutingshoekbeugel.
Lazy sykjen:
Patroan :
Hjir komme wy oerien alles fan 'e earste iepeningsbeugel oant de earste slutende beugel. It fraachteken twingt .* om sa min mooglik tekens te passenline.
Om alle rigels as ien tekenrige te ferwurkjen:
Generic pattern : char(.