Tabl cynnwys
Yn y llinynnau isod, mae'n debyg eich bod am ddileu'r rhif archeb cyntaf. Mae pob rhif o'r fath yn dechrau gyda'r arwydd hash (#) ac yn cynnwys 5 digid yn union. Felly, gallwn eu hadnabod gan ddefnyddio'r regex hwn:
Patrwm : #\d{5}\b
Mae'r gair ffin \b yn pennu na all is-linyn cyfatebol fod. rhan o linyn mwy fel #10000001.
I ddileu pob matsys, nid yw'r arg instance_num wedi ei ddiffinio:
=RegExpReplace(A5, "#\d{5}\b", "")
I ddileu'r digwyddiad cyntaf yn unig, rydym yn gosod y ddadl instance_num i 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex i dynnu rhai nodau
I dynnu rhai nodau oddi ar linyn, ysgrifennwch bob nod diangen a gwahanwch nhw gyda bar fertigolcystrawen yn rhydd o gyfyngiadau VBA RegExp, ac yn ail, nid oes angen mewnosod unrhyw god VBA yn eich llyfrau gwaith gan fod yr holl integreiddio cod yn cael ei wneud gennym ni yn y pen ôl.
Eich rhan chi o'r swydd yw adeiladu mynegiant rheolaidd a ei weini i'r ffwythiant :) Gadewch i mi ddangos i chi sut i wneud hynny ar enghraifft ymarferol.
Sut i dynnu testun mewn cromfachau a cromfachau gan ddefnyddio regex
Mewn llinynnau testun hir, gwybodaeth llai pwysig yn aml wedi'i amgáu mewn [cromfachau] a (cromfachau). Sut ydych chi'n dileu'r manylion amherthnasol hynny sy'n cadw'r holl ddata arall?
Yn wir, rydym eisoes wedi adeiladu regex tebyg ar gyfer dileu tagiau html, h.y. testun o fewn cromfachau ongl. Yn amlwg, bydd yr un dulliau yn gweithio ar gyfer cromfachau sgwâr a chrwn hefyd.
Patrwm : (\(.*?\))
Ydych chi erioed wedi meddwl pa mor bwerus fyddai Excel pe bai rhywun yn gallu cyfoethogi ei becyn offer gydag ymadroddion rheolaidd? Rydym nid yn unig wedi meddwl ond wedi gweithio arno :) A nawr, gallwch ychwanegu'r swyddogaeth RegEx wych hon i'ch llyfrau gwaith eich hun a dileu is-linynnau sy'n cyfateb i batrwm mewn dim o amser!
Yr wythnos diwethaf, fe wnaethom edrych sut i ddefnyddio mynegiadau rheolaidd i ddisodli llinynnau yn Excel. Ar gyfer hyn, rydym wedi creu swyddogaeth Regex Replace arferol. Fel y digwyddodd, mae'r swyddogaeth yn mynd y tu hwnt i'w brif ddefnydd a gall nid yn unig ddisodli llinynnau ond hefyd eu tynnu. Sut gallai hynny fod? O ran Excel, nid yw cael gwared ar werth yn ddim arall ond gosod llinyn gwag yn ei le, rhywbeth y mae ein swyddogaeth Regex yn dda iawn yn ei wneud!
Fel y gwyddom i gyd, ni chefnogir ymadroddion rheolaidd yn Excel yn ddiofyn. Er mwyn eu galluogi, mae angen i chi greu eich swyddogaeth a ddiffinnir gan y defnyddiwr eich hun. Y newyddion da yw bod swyddogaeth o'r fath eisoes wedi'i hysgrifennu, ei phrofi, ac yn barod i'w defnyddio. Y cyfan sy'n rhaid i chi ei wneud yw copïo'r cod hwn, ei gludo yn eich golygydd VBA, ac yna cadw'ch ffeil fel llyfr gwaith macro-alluogi (.xlsm).
Mae gan y swyddogaeth y cystrawen ganlynol:
RegExpReplace(testun, patrwm, amnewid, [instance_num], [match_case])Mae angen y tair arg gyntaf, mae'r ddwy olaf yn ddewisol.
Lle:
- Testun - y llinyn testun i'w chwilioyn bosibl nes iddo ddod o hyd i fraced cau.
Pa bynnag batrwm a ddewiswch, bydd y canlyniad yn hollol yr un fath.
Er enghraifft, i dynnu pob tag html o linyn yn A5 a gadewch y testun, y fformiwla yw:
=RegExpReplace(A5, "]*>", "")
Neu gallwch ddefnyddio'r meintiolydd diog fel y dangosir yn y sgrinlun:
Mae'r datrysiad hwn yn gweithio'n berffaith i testun sengl (rhesi 5 - 9). Ar gyfer testunau lluosog (rhesi 10 - 12), mae'r canlyniadau'n amheus - mae testunau o wahanol dagiau'n cael eu huno yn un. Ydy hyn yn gywir ai peidio? Rwy'n ofni, nid yw'n rhywbeth y gellir ei benderfynu'n hawdd - mae'r cyfan yn dibynnu ar eich dealltwriaeth o'r canlyniad a ddymunir. Er enghraifft, yn B11, disgwylir y canlyniad "A1"; tra yn B10, efallai y byddwch am i "data1" a "data2" gael eu gwahanu gyda bwlch.
I dynnu tagiau html a gwahanu gweddill y testunau gyda bylchau, gallwch symud ymlaen fel hyn:
- Newid tagiau gyda bylchau " ", nid llinynnau gwag:
=RegExpReplace(A5, "]*>", " ")
- Lleihau bylchau lluosog i nod bylchau sengl:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Torrwch y bylchau arwain a llusgo:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Bydd y canlyniad yn edrych rhywbeth fel hyn:
Ablebits Regex Remove Tool
Os ydych chi wedi cael cyfle i ddefnyddio ein Ultimate Suite for Excel, mae'n debyg eich bod eisoes wedi darganfod y Regex Tools newydd a gyflwynwyd gyda'r datganiad diweddar. Harddwch y swyddogaethau Regex .NET hyn yw eu bod, yn gyntaf, yn cefnogi mynegiant rheolaidd llawn sylwyr opsiwn Dileu , a tharo Dileu .
I gael y canlyniadau fel fformiwlâu, nid gwerthoedd, dewiswch y blwch ticio Mewnosod fel fformiwla .
I dynnu testun o fewn cromfachau o'r llinynnau yn A2:A5, rydym yn ffurfweddu'r gosodiadau fel a ganlyn:
- Newid tagiau gyda bylchau " ", nid llinynnau gwag:
- Patrwm - y mynegiad arferol i chwilio amdano.
- Amnewid - y testun i'w ddisodli. I tynnu is-linynnau sy'n cyfateb i'r patrwm, defnyddiwch llinyn gwag ("") i'w newid.
- Instance_num (dewisol) - yr enghraifft i disodli. Os caiff ei hepgor, caiff pob cyfatebiaeth a ganfuwyd ei disodli (rhagosodedig).
- Match_case (dewisol) - gwerth Boole yn nodi a ddylid paru neu anwybyddu'r cas testun. Ar gyfer paru achos-sensitif, defnyddiwch TRUE (diofyn); am achos-ansensitif - ANGHYWIR.
O ganlyniad, mae'r ffwythiant AblebitsRegexRemove yn cael ei fewnosod mewn colofn newydd wrth ymyl eich data gwreiddiol.
0>Gellir hefyd fewnbynnu'r ffwythiant yn uniongyrchol mewn cell drwy'r blwch deialog safonol Mewnosod Swyddogaeth , lle caiff ei chategoreiddio o dan AblebitsUDFs .<3
Gan fod AblebitsRegexRemove wedi'i gynllunio i dynnu testun, dim ond dwy arg sydd ei angen - y llinyn ffynhonnell a regex. Gellir diffinio'r ddau baramedr yn uniongyrchol mewn fformiwla neu eu cyflenwi ar ffurf cyfeiriadau cell. Os oes angen, gellir defnyddio'r ffwythiant personol hwn ynghyd ag unrhyw rai brodorol.
Er enghraifft, i docio bylchau ychwanegol yn y llinynnau canlyniadol, gallwch ddefnyddio'r swyddogaeth TRIM fel deunydd lapio:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Dyna sut i dynnu llinynnau yn Excel gan ddefnyddio mynegiadau rheolaidd. Diolch i chi am ddarllen ac edrychaf ymlaen at eich gweld ar ein blog wythnos nesaf!
Lawrlwythiadau ar gael
Tynnwch y llinynnau gan ddefnyddio regex - enghreifftiau (ffeil .xlsm)
Ultimate Suite - fersiwn prawf (ffeil .exe)
i mewn.Am ragor o wybodaeth, gweler swyddogaeth RegExpReplace.
Awgrym. Mewn achosion syml, gallwch chi dynnu nodau neu eiriau penodol o gelloedd gyda fformiwlâu Excel. Ond mae mynegiadau rheolaidd yn rhoi llawer mwy o opsiynau ar gyfer hyn.
Sut i dynnu llinynnau gan ddefnyddio mynegiadau rheolaidd - enghreifftiau
Fel y soniwyd uchod, i dynnu rhannau o destun sy'n cyfateb i batrwm, rydych am eu disodli gyda llinyn gwag. Felly, mae fformiwla generig yn cymryd y siâp hwn:
RegExpReplace(testun, patrwm, "", [instance_num], [match_case])Mae'r enghreifftiau isod yn dangos gwahanol weithrediadau o'r cysyniad sylfaenol hwn.
Dileu pob cyfatebiad neu gyfatebiaeth benodol
Mae ffwythiant RegExpReplace wedi ei gynllunio i ddod o hyd i bob is-linyn sy'n cyfateb i regex penodol. Mae pa ddigwyddiadau i'w dileu yn cael eu rheoli gan y 4edd arg ddewisol, a enwir instance_num .
Y rhagosodiad yw "pob cyfatebiaeth" - pan fydd y instance_num gweithredwr cydgadwyn (&) a swyddogaethau Testun fel DDE, CANOLBARTH a CHWITH.
Er enghraifft, i ysgrifennu pob rhif ffôn yn y fformat (123) 456-7890, y fformiwla yw:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Ble mae B5 yn allbwn swyddogaeth RegExpReplace.
Tynnu nodau arbennig gan ddefnyddio regex
Yn un o'n tiwtorialau, fe wnaethom edrych ar sut i gael gwared ar nodau diangen yn Excel gan ddefnyddio swyddogaethau mewnol ac arfer. Mae ymadroddion rheolaidd yn gwneud pethau'n llawer haws! Yn lle rhestru'r holl nodau i'w dileu, nodwch y rhai rydych am eu cadw :)
Mae'r patrwm yn seiliedig ar dosbarthiadau nodau negyddwyd - mae caret yn cael ei roi y tu mewn i ddosbarth nodau [^ ] i gydweddu ag unrhyw nod unigol NID mewn cromfachau. Mae'r meintiolydd + yn ei orfodi i ystyried nodau olynol fel un cyfatebiad, fel bod is-linyn cyfatebol yn cael ei wneud yn lle un nod unigol yn hytrach nag ar gyfer pob nod unigol.
Yn dibynnu ar eich anghenion, dewiswch un o'r regexes canlynol.
3>I dynnu nodau nad ydynt yn alffaniwmerig , h.y. pob nod ac eithrio llythrennau a digidau:
Patrwm : [^0-9a-zA-Z] +
I gael gwared ar bob nod ac eithrio llythrennau , digid a bylchau :
Patrwm : [^0-9a-zA-Z ]+
I ddileu pob nod ac eithrio llythrennau , digid a tansgorio , gallwch ddefnyddio \ W sy'n sefyll am unrhyw nod NAD yw'n nod alffaniwmerig neutanlinellu:
Patrwm : \W+
Os ydych chi eisiau cadw rhai nodau eraill , e.e. atalnodau, rhowch nhw o fewn y cromfachau.
Er enghraifft, i dynnu unrhyw nod heblaw llythyren, digid, cyfnod, coma, neu ofod, defnyddiwch y regex canlynol:
Patrwm : [^0-9a-zA-Z\., ]+
Mae hwn yn dileu pob nod arbennig yn llwyddiannus, ond mae gofod gwyn ychwanegol yn aros.
I drwsio hyn, gallwch nythu'r ffwythiant uchod i mewn i un arall sy'n disodli bylchau lluosog gydag un nod gofod.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Neu defnyddiwch y ffwythiant TRIM brodorol gyda'r un effaith :
=TRIM(RegExpReplace(A5, $A$2, ""))
12>Regex i dynnu nodau di-rhif
I ddileu pob nod di-rhifol o linyn, gallwch ddefnyddio naill ai'r fformiwla hir hon neu un o'r regexes syml iawn a restrir isod.
Cymerwch unrhyw nod NAD yw'n ddigid:
Patrwm : \D+
Stripiwch nodau nad ydynt yn rhifol gan ddefnyddio dosbarthiadau sydd wedi'u negyddu:
Patrwm : [^0-9]+
Patrwm : [^\d] +
Awgrym. Os mai'ch nod yw tynnu testun a gollwng y niferoedd sy'n weddill i mewn i gelloedd ar wahân neu eu gosod i gyd mewn un gell wedi'i gwahanu â amffinydd penodedig, yna defnyddiwch y swyddogaeth RegExpExtract fel yr eglurir yn Sut i dynnu rhifau o linyn gan ddefnyddio mynegiadau rheolaidd.
Regex i dynnu popeth ar ôl gofod
I ddileu popeth ar ôl bwlch, defnyddiwch naill ai'r bwlch ( ) neunod gofod gwyn (\s) i ddod o hyd i'r bwlch cyntaf a .* i gyd-fynd ag unrhyw nodau ar ei ôl.
Os oes gennych chi linynnau un llinell sydd ond yn cynnwys bylchau arferol (gwerth 32 yn y system ASCII 7-did) , nid oes ots mewn gwirionedd pa un o'r regexes isod rydych chi'n eu defnyddio. Yn achos llinynnau aml-linell, mae'n gwneud gwahaniaeth.
I dynnu popeth ar ôl nod gofod , defnyddiwch y regex hwn:
Patrwm :" .*"
=RegExpReplace(A5, " .*", "")
Bydd y fformiwla hon yn stripio unrhyw beth ar ôl y bwlch cyntaf yn pob llinell . Er mwyn i'r canlyniadau ddangos yn gywir, gwnewch yn siŵr eich bod yn troi'r Testun Lapio ymlaen.
I dynnu popeth ar ôl gofod gwyn (gan gynnwys bwlch, tab, dychweliad cerbyd a llinell newydd), y regex yw:
Patrwm : \s.*
=RegExpReplace(A5, "\s.*", "")
Oherwydd \s yn cyfateb i ychydig o wahanol fathau gofod gwyn gan gynnwys llinell newydd (\n), mae'r fformiwla hon yn dileu popeth ar ôl y bwlch cyntaf mewn cell, ni waeth faint o linellau sydd ynddi.
Regex i dynnu testun ar ôl penodol nod
Gan ddefnyddio'r dulliau o'r enghraifft flaenorol, gallwch ddileu testun ar ôl unrhyw nod rydych chi'n ei nodi.
I drin pob llinell ar wahân:
Patrwm generig : torgoch.*
Mewn llinynnau un llinell, bydd hyn yn dileu popeth ar ôl torgoch . Mewn llinynnau aml-linell, bydd pob llinell yn cael ei phrosesu'n unigol oherwydd yn y blas VBA Regex, mae cyfnod (.) yn cyfateb i unrhyw gymeriad ac eithrio un newydddechrau llinyn ^, rydym yn cyfateb sero neu fwy o nodau nad ydynt yn fylchau [^ ]* sy'n cael eu dilyn yn syth gan " +" un neu fwy o fylchau. Ychwanegir y rhan olaf i atal bylchau arwain posibl yn y canlyniadau.
I dynnu testun cyn y bwlch cyntaf ym mhob llinell, ysgrifennir y fformiwla yn y modd rhagosodedig "pob matsys" ( instance_num hepgorwyd):
=RegExpReplace(A5, "^[^ ]* +", "")
I ddileu testun cyn y bwlch cyntaf yn y llinell gyntaf, a gadael pob llinell arall yn gyfan, mae'r arg instance_num wedi'i gosod i 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex i dynnu popeth cyn nod
Y ffordd hawsaf i dynnu pob testun cyn nod penodol yw drwy ddefnyddio regex fel hyn:
Patrwm generig : ^[^char]* torgoch
Wedi'i gyfieithu i iaith ddynol, mae'n dweud: "o ddechrau llinyn wedi'i angori gan ^ , cyfateb 0 nod neu fwy ac eithrio tolosg [^ tor]* hyd at y digwyddiad cyntaf o tor .
Er enghraifft, i ddileu pob testun cyn y colon cyntaf , defnyddiwch y mynegiad rheolaidd hwn:
Patrwm : ^[^:]*:
Er mwyn osgoi arwain bylchau yn y canlyniadau, ychwanegwch nod gofod gwyn \s* i'r Bydd hyn yn dileu popeth g cyn y colon cyntaf a thorrwch unrhyw fylchau yn union ar ei ôl:
Patrwm : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Awgrym. Ar wahân i ymadroddion rheolaidd, mae gan Excel ei fodd ei hun i dynnu testun yn ôl safle neu gyfatebiaeth. I ddysgu sut i gyflawni'r dasg gyda fformiwlâu brodorol,gweler Sut i dynnu testun cyn neu ar ôl cymeriad yn Excel.
Regex i dynnu popeth ac eithrio
I ddileu pob nod o linyn ac eithrio'r rhai rydych am eu cadw, defnyddiwch ddosbarthiadau nodau sydd wedi'u negyddu.
Er enghraifft, i dynnu pob nod ac eithrio llythrennau bach a dotiau, y regex yw:
Patrwm : [^a-z\.]+
Mewn gwirionedd, gallem wneud heb y meintiolydd + yma gan fod ein swyddogaeth yn disodli pob un dod o hyd i gemau. Mae'r meintiolydd yn ei wneud ychydig yn gyflymach - yn lle trin pob nod unigol, rydych chi'n disodli is-linyn.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex i dynnu tagiau html yn Excel
Yn gyntaf, dylid nodi nad yw HTML yn iaith reolaidd, felly nid ei dosrannu gan ddefnyddio ymadroddion rheolaidd yw'r ffordd orau. Wedi dweud hynny, gall regexes yn bendant helpu i dynnu tagiau allan o'ch celloedd i wneud eich set ddata'n lanach.
O ystyried bod tagiau html bob amser yn cael eu gosod o fewn cromfachau ongl , gallwch ddod o hyd iddynt gan ddefnyddio un o'r regexes canlynol.
Dosbarth negyddedig:
Patrwm : ]*>
Yma, rydym yn paru braced ongl agoriadol, wedi'i ddilyn gan sero neu fwy o ddigwyddiadau o unrhyw nod ac eithrio'r braced ongl cau [^>]* hyd at y braced ongl cau agosaf.
Chwiliad diog:
Patrwm :
Yma, rydym yn paru unrhyw beth o'r braced agoriadol cyntaf i'r braced cau cyntaf. Mae'r marc cwestiwn yn gorfodi .* i gyfateb cyn lleied o nodau âllinell.
I brosesu pob llinell fel llinyn sengl:
Patrwm generig : torgoch(.