Tabl cynnwys
Yn y tiwtorial hwn, byddwch yn dysgu sut i ddefnyddio mynegiadau rheolaidd yn Excel i ddarganfod a thynnu is-linynnau sy'n cyfateb i batrwm penodol.
Mae Microsoft Excel yn darparu nifer o swyddogaethau i echdynnu testun o gelloedd. Gall y swyddogaethau hynny ymdopi â'r rhan fwyaf o heriau echdynnu llinynnol yn eich taflenni gwaith. Y rhan fwyaf, ond nid pob un. Pan fydd swyddogaethau'r Testun yn baglu, daw ymadroddion rheolaidd i'w hachub. Arhoswch... Nid oes gan Excel unrhyw swyddogaethau RegEx! Gwir, dim swyddogaethau mewnol. Ond nid oes unrhyw beth a fyddai'n eich atal rhag defnyddio'ch rhai eich hun :)
I ychwanegu swyddogaeth Regex Extract wedi'i deilwra i'ch Excel, gludwch y cod canlynol yn y golygydd VBA. Er mwyn galluogi mynegiadau rheolaidd yn VBA, rydym yn defnyddio gwrthrych adeiledig Microsoft RegExp.
Swyddogaeth Gyhoeddus RegExpExtract(testun Fel Llinyn , patrwm Fel Llinyn , Dewisol instance_num Fel Cyfanrif = 0, Match_case dewisol Fel Boole = Gwir ) Dim text_matches() Fel Llinyn Dim matches_index Fel Cyfanrif Ar Gwall GoTo ErrHandl RegExpExtract = " " Gosod regex = CreateObject ( " VBScript.RegExp " ) regex.pattern = patrwm regex.Global = Gwir regex.MultiLine = Gwir Os Gwir = match_case Yna regex. neamhairdcase = Gau Arall regex.ignorecase = Diwedd Gwir Os yw'r Gosod yn cyfateb = regex.Execute(text) Os 0 < matches.Count Yna Os (0 = example_num) Yna ReDim text_matches(matches.Count - 1, 0) Ar gyfer matches_index = 0 IVBA RegExp, rwy'n eich annog i ddarllen y rhan nesaf sy'n trafod swyddogaethau .NET Regex llawer mwy pwerus.Swyddogaeth Regex wedi'i seilio ar y cwsmer .NET i echdynnu testun yn Excel
Yn wahanol i swyddogaethau VBA RegExp sy'n gellir ei ysgrifennu gan unrhyw ddefnyddiwr Excel, .NET RegEx yw maes y datblygwr. Mae Fframwaith Microsoft .NET yn cefnogi cystrawen mynegiant rheolaidd llawn-ymddangos sy'n gydnaws â Perl 5. Ni fydd yr erthygl hon yn eich dysgu sut i ysgrifennu swyddogaethau o'r fath (nid wyf yn rhaglennydd ac nid oes gennyf syniad lleiaf ar sut i wneud hynny :)
Mae pedair swyddogaeth bwerus a brosesir gan yr injan safonol .NET RegEx eisoes wedi'u hysgrifennu gan ein datblygwyr ac wedi'u cynnwys yn Ultimate Suite. Isod, byddwn yn dangos rhai defnyddiau ymarferol o'r swyddogaeth a ddyluniwyd yn arbennig ar gyfer echdynnu testun yn Excel.
Awgrym. I gael gwybodaeth am gystrawen .NET Regex, cyfeiriwch at .NET Regular Expression Language.
Sut i echdynnu pigiadau yn Excel gan ddefnyddio mynegiadau rheolaidd
A chymryd bod y fersiwn diweddaraf o Ultimate Suite wedi'i osod gennych, mae echdynnu testun gan ddefnyddio mynegiadau rheolaidd yn dod i lawr i'r ddau gam hyn:
- Ar y tab Ablebits Data , yn y grŵp Text , cliciwch Regex Tools .
- Ar y cwarel Regex Tools , dewiswch y data ffynhonnell, rhowch eich patrwm Regex, a dewiswch yr opsiwn Echdynnu . I gael y canlyniad fel swyddogaeth arferiad, nid gwerth, dewiswch y siec Mewnosod fel fformiwla bocs. Ar ôl ei wneud, cliciwch ar y botwm Echdynnu .
Bydd y canlyniadau yn ymddangos mewn colofn newydd i'r dde o'ch data gwreiddiol:
Cystrawen AblebitsRegexExtract
Mae gan ein ffwythiant personol y gystrawen ganlynol:
AblebitsRegexExtract(cyfeirnod, regular_expression)Ble:
- Cyfeirnod (angenrheidiol) - cyfeiriad at y gell sy'n cynnwys y llinyn ffynhonnell.
- Mynegiad_rheolaidd (angenrheidiol) - y patrwm regex i gyd-fynd.
Nodyn pwysig! Mae'r swyddogaeth ond yn gweithio ar y peiriannau gyda Ultimate Suite for Excel wedi'u gosod.
Nodiadau defnydd
I wneud eich cromlin ddysgu'n llyfnach a'ch profiad yn fwy pleserus, rhowch sylw i'r pwyntiau hyn:
- I greu fformiwla, gallwch ddefnyddio ein Regex Tools , neu ddeialog Excel Insert function , neu deipio enw llawn y ffwythiant mewn cell. Unwaith y bydd y fformiwla wedi ei fewnosod, gallwch ei reoli (golygu, copïo neu symud) fel unrhyw fformiwla frodorol.
- Mae'r patrwm a roddwch ar y cwarel Regex Tools yn mynd i'r 2il arg. Mae hefyd yn bosibl cadw mynegiant rheolaidd mewn cell ar wahân. Yn yr achos hwn, defnyddiwch gyfeirnod cell ar gyfer yr 2il arg.
- Mae'r ffwythiant yn echdynnu'r cyfatebiad cyntaf .
- Yn ddiofyn, mae'r ffwythiant yn achos -sensitif . Ar gyfer paru sy'n sensitif i achos, defnyddiwch y patrwm (?i).
- Os na chanfyddir paru, mae gwall # N/Adychwelyd.
Regex i echdynnu llinyn rhwng dau nod
I gael testun rhwng dau nod, gallwch ddefnyddio naill ai grŵp dal neu edrych o gwmpas.
Dewch i ni dweud eich bod yn bwriadu echdynnu testun rhwng cromfachau. Grŵp cipio yw'r ffordd hawsaf.
Patrwm 1 : \[(.*?)\]
Gyda golwg bositif tu ôl ac edrych ymlaen, bydd y canlyniad yn union yr un peth.
Patrwm 2 : (?<=\[)(.*?)(?=\])
Rhowch sylw bod ein grŵp cipio Mae (.*?) yn gwneud chwiliad diog am destun rhwng dau gromfach - o'r cyntaf [ i'r cyntaf ]. Byddai grŵp dal heb farc cwestiwn (.*) yn gwneud chwiliad barus ac yn dal popeth o'r cyntaf [ i'r olaf ].
Gyda'r patrwm yn A2, mae'r fformiwla yn mynd fel a ganlyn:
=AblebitsRegexExtract(A5, $A$2)
Sut i gael pob paru
Fel y soniwyd eisoes, dim ond un cyfatebiad y gall ffwythiant AblebitsRegextract ei dynnu. I gael pob gêm, gallwch ddefnyddio'r swyddogaeth VBA yr ydym wedi'i thrafod yn gynharach. Fodd bynnag, mae un cafeat - nid yw VBA RegExp yn cefnogi dal grwpiau, felly bydd y patrwm uchod yn dychwelyd y nodau "ffin" hefyd, cromfachau yn ein hachos ni.
=TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))
I gael gwared o'r cromfachau, DEILIWCH nhw gyda llinynnau gwag ("") gan ddefnyddio'r fformiwla hon:
=SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")
Er mwyn gallu darllen yn well, rydym yn defnyddio coma ar gyfer amffinydd.
Regex i echdynnu testun rhwng dau linyn
Y dull rydym wedi gweithioei ddehongli'n llythrennol).
Yn dibynnu ar ba fynegiant rheolaidd sy'n cael ei roi yn A2, bydd y fformiwla isod yn cynhyrchu canlyniadau gwahanol:
=AblebitsRegexExtract(A5, $A$2)
Regex i echdynnu'r enw parth llawn gyda phob is-barth:
Regex i echdynnu ail lefel parth heb is-barthau:
Dyna sut i echdynnu rhannau o destun yn Excel gan ddefnyddio ymadroddion rheolaidd. Diolch i chi am ddarllen ac edrychaf ymlaen at eich gweld ar ein blog wythnos nesaf!
Ar gael i'w lawrlwytho
Enghreifftiau o Excel Regex Extract (ffeil .xlsm)
Fersiwn treial Ultimate Suite (ffeil .exe)
gan 3>\b(0?[0-9]matches.Count - 1 text_matches(matches_index, 0) = matches.Item(matches_index) Matches_index nesaf RegExpExtract = text_matches Arall RegExpExtract = matches.Item(instance_num - 1) Diwedd Os Diwedd Os Diwedd Os Gadael Swyddogaeth ErrHandl: RegExp(Extractxl) Diwedd Swyddogaeth CVErOs nad oes gennych lawer o brofiad gyda VBA, efallai y bydd canllaw defnyddiwr cam wrth gam yn ddefnyddiol: Sut i fewnosod cod VBA yn Excel.
Nodyn. Er mwyn i'r swyddogaeth weithio, gwnewch yn siŵr eich bod yn cadw'ch ffeil fel llyfr gwaith macro-alluogi (.xlsm).
Cystrawen RegExpExtract
Mae ffwythiant RegExpExtract yn chwilio llinyn mewnbwn am werthoedd sy'n cyfateb i fynegiad rheolaidd ac yn tynnu un neu bob cyfatebiaeth.
Mae gan y ffwythiant y gystrawen ganlynol :
RegExpExtract(testun, patrwm, [instance_num], [match_case])Ble:
- Testun (gofynnol) - y llinyn testun i chwilio ynddo.
- Patrwm (angenrheidiol) - y mynegiad rheolaidd i gyd-fynd. Pan gaiff ei gyflenwi'n uniongyrchol mewn fformiwla, dylid amgáu'r patrwm mewn dyfynodau dwbl.
- Instance_num (dewisol) - rhif cyfresol sy'n nodi pa enghraifft i'w hechdynnu. Os caiff ei hepgor, yn dychwelyd pob cyfatebiad a ganfuwyd (rhagosodedig).
- Match_case (dewisol) - yn diffinio a ddylid paru neu anwybyddu'r cas testun. Os yw'n WIR neu wedi'i hepgor (diofyn), perfformir paru achos-sensitif; os ANWIR - ansensitif i achosion.
Mae'r swyddogaeth yn gweithio ym mhob fersiwn o Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 ac Excel 2010.
4 peth y dylech chi eu gwybod am RegExpExtract
I ddefnyddio'r swyddogaeth yn eich Excel yn effeithiol, mae yna rai pethau pwysig i'w hystyried:
- Yn ddiofyn, mae'r ffwythiant yn dychwelyd pob cyfatebiaeth a ganfuwyd i gelloedd cyfagos fel y dangosir yn yr enghraifft hon. I gael digwyddiad penodol, rhowch rif cyfatebol i'r arg instance_num .
- Yn ddiofyn, mae'r ffwythiant yn cas-sensitif . Ar gyfer paru cas-sensitif, gosodwch y ddadl match_case i FALSE. Oherwydd y cyfyngiadau VBA, ni fydd y lluniad cas-ansensitif (?i) yn gweithio.
- Os na ddarganfyddir patrwm dilys , nid yw'r ffwythiant yn dychwelyd dim (llinyn gwag).
- Os yw'r patrwm yn annilys , bydd #VALUE! gwall yn digwydd.
Cyn i chi ddechrau defnyddio'r ffwythiant personol hwn yn eich taflenni gwaith, mae angen i chi ddeall yr hyn y gall ei wneud, ynte? Mae'r enghreifftiau isod yn ymdrin â rhai achosion defnydd cyffredin ac yn esbonio pam y gall yr ymddygiad fod yn wahanol yn Dynamic Array Excel (Microsoft 365 ac Excel 2021) ac Excel traddodiadol (2019 a fersiynau hŷn).
Sylwch. Mae enghreifftiau allan regex yn cael eu hysgrifennu ar gyfer setiau data syml tylwyth teg. Ni allwn warantu y byddant yn gweithio'n ddi-ffael yn eich taflenni gwaith go iawn. Byddai'r rhai sydd â phrofiad gyda regex yn cytuno bod ysgrifennu ymadroddion rheolaidd yn ffordd ddiddiwedd i berffeithrwydd - bron bob amser mae yna ffordd i wneudmae'n fwy cain neu'n gallu trin ystod ehangach o ddata mewnbwn.
Regex i dynnu rhif o'r llinyn
Yn dilyn yr uchafswm sylfaenol o addysgu "o'r syml i'r cymhlyg", byddwn yn dechrau gydag achos plaen iawn: tynnu rhif o'r llinyn.
Y y peth cyntaf i chi benderfynu yw pa rif i'w adalw: cyntaf, olaf, digwyddiad penodol neu bob rhif.
Tynnu rhif cyntaf
Mae hwn mor syml ag y gall regex ei gael. O wybod bod \d yn golygu unrhyw ddigid o 0 i 9, a + yn golygu un neu fwy o weithiau, mae ein mynegiant arferol ar y ffurf hon:
Patrwm : \d+
Gosod instance_num i 1 a byddwch yn cael y canlyniad dymunol:
=RegExpExtract(A5, "\d+", 1)
Lle mae A5 yn llinyn gwreiddiol.
Er hwylustod, gallwch fewnbynnu y patrwm mewn cell rhagddiffiniedig ($A$2 ) a chlowch ei gyfeiriad gyda'r arwydd $:
=RegExpExtract(A5, $A$2, 1)
Cael y rhif olaf
I echdynnu'r rhif olaf mewn llinyn , dyma'r patrwm i'w ddefnyddio:
Patrwm : (\d+)(?!.*\d)
Cyfieithwyd i iaith ddynol , mae'n dweud: darganfyddwch rif nad yw'n cael ei ddilyn (unrhyw le, nid dim ond ar unwaith) gan unrhyw rif arall. I fynegi hyn, rydym yn defnyddio golwg negyddol (?!.*\d), sy'n golygu na ddylai fod unrhyw ddigid arall (\d) i'r dde o'r patrwm waeth faint o nodau eraill sydd o'i flaen.<3
=RegExpExtract(A5, "(\d+)(?!.*\d)")
Awgrymiadau:
- I gael digwyddiad penodol , defnyddiwch \d+ ar gyfer patrwm a chyfres briodolrhif ar gyfer instance_num .
- Mae'r fformiwla i echdynnu pob rhif yn cael ei drafod yn yr enghraifft nesaf.
Regex i echdynnu pob cyfatebiad
Gan wthio ein hesiampl ychydig ymhellach, mae'n debyg eich bod am gael yr holl rifau o linyn, nid un yn unig.
Fel y cofiwch efallai, rheolir nifer y matsys a echdynnwyd gan y <1 dewisol>instance_num arg. Mae'r rhagosodiad i gyd yn cyfateb, felly rydych chi'n hepgor y paramedr hwn:
=RegExpExtract(A2, "\d+")
Mae'r fformiwla'n gweithio'n hyfryd ar gyfer un gell, ond mae'r ymddygiad yn wahanol yn Dynamic Array Excel a fersiynau nad ydynt yn ddeinamig.
Excel 365 ac Excel 2021
Oherwydd cefnogaeth ar gyfer araeau deinamig, mae fformiwla reolaidd yn arllwys yn awtomatig i gynifer o gelloedd ag sydd eu hangen i arddangos yr holl ganlyniadau a gyfrifwyd. O ran Excel, gelwir hyn yn ystod gollyngedig:
Excel 2019 ac is
Yn Excel cyn-ddeinamig, byddai'r fformiwla uchod yn dychwelyd un gêm yn unig. I gael gemau lluosog, mae angen i chi ei wneud yn fformiwla arae. Ar gyfer hyn, dewiswch ystod o gelloedd, teipiwch y fformiwla, a gwasgwch Ctrl + Shift + Enter i'w chwblhau.
Anfantais y dull hwn yw criw o #N/A gwallau yn ymddangos mewn "celloedd ychwanegol" . Yn anffodus, ni ellir gwneud dim amdano (ni all IFERROR nac IFNA ei drwsio, gwaetha'r modd).
Tynnu pob cyfatebiaeth mewn un gell
Wrth brosesu colofn o ddata, mae'n amlwg na fydd y dull uchod yn gweithio. Yn yr achos hwn, ateb delfrydolyn dychwelyd pob gêm mewn un gell. I'w wneud, gwasanaethwch ganlyniadau RegExpExtract i'r ffwythiant TEXTJOIN a gwahanwch nhw gydag unrhyw amffinydd yr hoffech chi, dywedwch atalnod a bwlch:
=TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))
Nodyn. Gan mai dim ond yn Excel ar gyfer Microsoft 365, Excel 2021 ac Excel 2019 y mae'r ffwythiant TEXTJOIN ar gael, ni fydd y fformiwla'n gweithio mewn fersiynau hŷn.
Regex i echdynnu testun o'r llinyn
Tynnu testun o mae llinyn alffaniwmerig yn dasg eithaf heriol yn Excel. Gyda regex, mae'n dod mor hawdd â phastai. Defnyddiwch ddosbarth sydd wedi'i negyddu i gyd-fynd â phopeth nad yw'n ddigid.
Patrwm : [^\d]+
I gael is-linynnau mewn celloedd unigol (ystod gollwng) , y fformiwla yw:
=RegExpExtract(A5, "[^\d]+")
I allbynnu pob matsys i un gell, nythu'r ffwythiant RegExpExtract yn TEXTJOIN fel hyn:
=TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))
Regex i echdynnu cyfeiriad e-bost o'r llinyn
I dynnu cyfeiriad e-bost allan o linyn sy'n cynnwys llawer o wybodaeth wahanol, ysgrifennwch fynegiad rheolaidd sy'n atgynhyrchu strwythur y cyfeiriad e-bost.
Patrwm : [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}
Torri lawr y regex hwn , dyma beth gawn ni:
- [\w\.\-]+ yw enw defnyddiwr a all gynnwys 1 neu fwy o nodau alffaniwmerig, tanlinellu, dotiau a chysylltiadau.
- @ symbol
- [A-Za-z0-9\.\-]+ yw enw parth sy'n cynnwys: priflythrennau a llythrennau bach, digidau, cysylltnodau a dotiau (rhag ofno is-barthau). Ni chaniateir tanlinellu yma, felly defnyddir 3 set nodau gwahanol (fel A-Z a-z a 0-9) yn lle \w sy'n cyfateb i unrhyw lythyren, digid neu dansgorio.
- \.[A-Za-z ]Mae {2,24} yn barth lefel uchaf. Mae'n cynnwys dot wedi'i ddilyn gan lythrennau mawr a llythrennau bach. Mae'r rhan fwyaf o'r parthau lefel uchaf yn 3-llythyren o hyd (e.e. .com .org, .edu, ac ati), ond mewn egwyddor gall gynnwys rhwng 2 a 24 llythyren (y TLD sydd wedi'i gofrestru hiraf).
=RegExpExtract(A5, $A$2)
Regex i echdynnu parth o e-bost
Pan mae yn dod i echdynnu parth e-bost, y syniad cyntaf sy'n dod i'r meddwl yw defnyddio grŵp dal i ddod o hyd i destun sy'n dilyn y nod @ yn syth.
Patrwm : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})Gwasanaethwch ef i'n swyddogaeth RegExp:
=RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")
A fe gewch y canlyniad hwn:
Gydag ymadroddion rheolaidd clasurol, nid yw unrhyw beth y tu allan i grŵp dal wedi'i gynnwys yn yr echdyniad. Nid oes unrhyw un yn gwybod pam mae VBA RegEx yn gweithio'n wahanol ac yn dal "@" hefyd. I gael gwared arno, gallwch dynnu'r nod cyntaf o'r canlyniad trwy roi llinyn gwag yn ei le.
=REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")
Mynegiad rheolaidd i echdynnu rhifau ffôn
Rhifau ffôn Gellir ei ysgrifennu mewn llawer o wahanol ffyrdd, a dyna pam ei bod nesaf yn amhosibl i ddod o hyd i ateb yn gweithio o dan y cyfan(\d{4}o llinyn
Mae mynegiad rheolaidd ar gyfer echdynnu dyddiad yn dibynnu ar y fformat y mae'r dyddiad yn ymddangos o fewn llinyn. Er enghraifft:
I dynnu dyddiadau fel 1/1/21 neu 01/01/2021, y regex yw: \d{1,2}\/\d{1,2}\/(\d {4}amgylchiadau. Serch hynny, gallwch ysgrifennu'r holl fformatau a ddefnyddir yn eich set ddata a cheisio eu paru.
Ar gyfer yr enghraifft hon, rydym yn mynd i greu regex a fydd yn echdynnu rhifau ffôn yn unrhyw un o'r fformatau hyn:
(123) 345-6789 |
(123) 345 6789
(123)3456789
123- 345-6789
123.345.6789
123 345 6789
1233456789
- Mae'r rhan gyntaf \(?\d{3} yn cyfateb i sero neu un cromfach agoriadol wedi'i ddilyn gan dri digid d{3}.
- Mae'r rhan [-\. \)]* yn golygu unrhyw nod mewn cromfachau sgwâr sy'n ymddangos 0 neu fwy o weithiau: cysylltnod, cyfnod, gofod neu gromfachau cau.
- Nesaf, mae gennym dri digid eto d{3} wedi'i ddilyn gan unrhyw gysylltnod, cyfnod neu ofod [-\. ]? ymddangos 0 neu 1 amser.
- Ar ôl hynny, mae grŵp o bedwar digid \d{4}.
- Yn olaf, mae ffin gair \b yn diffinio mai rhif ffôn ydyn ni Ni all chwilio am fod yn rhan o rif mwy.
Mae'r fformiwla gyflawn yn cymryd y siâp hwn:
=RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")
Cofiwch y gall y regex uchod ddychwelyd rhai canlyniadau ffug-bositif megis 123) 456 7899 neu (123 456 7899. Mae'r fersiwn isod yn trwsio'r materion hyn. Fodd bynnag, dim ond mewn swyddogaethau VBA RegExp y mae'r gystrawen hon yn gweithio, nid mewn ymadroddion rheolaidd clasurol.
Patrwm : ( \(\d{3}\)bydd allan ar gyfer tynnu testun rhwng dau nod hefyd yn gweithio ar gyfer echdynnu testun rhwng dau linyn.
Er enghraifft, i gael popeth rhwng "prawf 1" a "prawf 2", defnyddiwch y mynegiad rheolaidd canlynol.
Patrwm : prawf 1(.*?)prawf 2
Y fformiwla gyflawn yw:
=AblebitsRegexExtract(A5, "test 1(.*?)test 2")
Regex i echdynnu parth o URL
Hyd yn oed gydag ymadroddion rheolaidd, nid yw tynnu enwau parth o URLs yn dasg ddibwys. Yr elfen allweddol sy'n gwneud y tric yw grwpiau nad ydynt yn dal. Yn dibynnu ar eich nod yn y pen draw, dewiswch un o'r regexes isod.
I gael enw parth llawn gan gynnwys is-barthau
Patrwm : (?: https?\: