Excel Regex: paru llinynnau gan ddefnyddio mynegiadau rheolaidd

  • Rhannu Hwn
Michael Brown

Yn y tiwtorial hwn, byddwn yn edrych yn fanwl ar sut i ddefnyddio regex i baru llinynnau yn Excel.

Pan fydd angen i chi ddod o hyd i werth penodol mewn ystod o gelloedd, byddech yn defnyddio'r ffwythiant MATCH neu XMATCH. Wrth chwilio am linyn penodol mewn cell, mae'r swyddogaethau FIND a CHWILIO yn ddefnyddiol. A sut ydych chi'n gwybod a yw cell yn cynnwys gwybodaeth sy'n cyfateb i batrwm penodol? Yn amlwg, trwy ddefnyddio ymadroddion rheolaidd. Ond allan o'r bocs nid yw Excel yn cefnogi regexes! Dim pryderon, byddwn yn ei orfodi i :)

    > Swyddogaeth Excel VBA Regex i gyd-fynd â llinynnau

    Fel mae'n eithaf clir o'r pennawd, er mwyn defnyddio mynegiadau rheolaidd yn Excel, mae angen i chi greu eich swyddogaeth eich hun. Yn ffodus, mae gan Excel's VBA wrthrych RegExp wedi'i adeiladu, y gallwch ei ddefnyddio yn eich cod fel y dangosir isod:

    Swyddogaeth Gyhoeddus RegExpMatch(input_range As Range, pattern As String , Match_case Opsiynol Fel Boolean = Gwir ) Fel Amrywiad Dim arRes() Fel Arae Amrywiad i storio'r canlyniadau Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long' mynegai y rhes gyfredol yn yr amrediad ffynhonnell, mynegai'r golofn gyfredol yn yr amrediad ffynhonnell, cyfrif y rhesi, cyfrif o colofnau Ar Gwall GoTo ErrHandl RegExpMatch = arRes Gosod regex = CreateObject ( " VBScript.RegExp " ) regex.pattern = patrwm regex.Global = Gwir regex.MultiLine = Gwir Os Gwir = match_case Yna regex.ignorecase = Gau Arall regex = Truecase regex. Diweddymadroddion.

    Patrwm : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b

    Er mwyn deall yn well beth sy'n digwydd yma, gadewch i ni edrych yn agosach ar bob rhan :

    • Gall Enw defnyddiwr gynnwys llythrennau, rhifau, tanlinellau, dotiau a chysylltiadau. Gan gadw mewn cof bod \w yn cyfateb i unrhyw lythyren, digid neu danlinellu, rydym yn cael y regex canlynol: [\w\.\-]+
    • Gall enw parth gynnwys priflythrennau a llythrennau bach, digidau, cysylltnodau (ond nid yn y safle cyntaf nac olaf) a dotiau (rhag ofn is-barthau). Gan na chaniateir tanlinellu, yn lle \w rydym yn defnyddio 3 set nodau wahanol: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
    • Mae parth lefel uchaf yn cynnwys dot wedi'i ddilyn gan lythrennau mawr a llythrennau bach. Gall gynnwys rhwng 2 a 24 llythyren (y TLD hiraf sy'n bodoli ar hyn o bryd): \.[A-Za-z]{2,24}

    Nodyn. Mae'r patrwm yn tybio bod yr enw parth yn cynnwys 2 nod alffaniwmerig neu fwy.

    Gyda'r testun gwreiddiol yn A5 a'r patrwm yn A5, mae'r fformiwla yn cymryd y siâp hwn:

    =RegExpMatch(A5, $A$2)

    Neu gallech ddefnyddio rheoleidd symlach mynegiad ar gyfer dilysu e-bost gyda naill ai set nodau llythrennau bach neu briflythrennau:

    Patrwm : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b

    Ond gwnewch eich fformiwla achos yn ansensitif:

    =RegExpMatch(A5, $A$2, FALSE)

    Fformiwla Excel IF gyda match regex

    Oherwydd y ffaith bod wedi'i adeiladu a'i addasumae ffwythiannau'n mynd ymlaen yn braf, nid oes dim a fyddai'n eich rhwystro rhag eu defnyddio gyda'ch gilydd mewn un fformiwla.

    I ddychwelyd neu gyfrifo rhywbeth os yw mynegiad rheolaidd yn cyfateb a rhywbeth arall os nad yw'n cyfateb, mewnosodwch y RegExpMatch personol swyddogaeth yn nhestun rhesymegol IF:

    IF(RegExpMatch(…), [value_if_true], [value_if_false])

    Er enghraifft, os yw llinyn yn A5 yn cynnwys cyfeiriad e-bost dilys, gallwch ddychwelyd "Ie"; fel arall "Na".

    =IF(RegExpMatch(A5, $A$2,), "Yes", "No")

    Cyfrif os yw regex yn cyfateb

    Oherwydd nad yw ffwythiannau Excel brodorol yn cynnal mynegiadau rheolaidd, mae'n nid yw'n bosibl rhoi regex yn uniongyrchol yn swyddogaeth COUNTIS neu COUNTIFS. Yn ffodus, gallwch chi efelychu'r swyddogaeth hon gan ddefnyddio ein ffwythiant personol.

    Gan dybio eich bod wedi defnyddio regex i gyfateb rhifau ffôn ac allbynnu'r canlyniadau yng ngholofn B. I ddarganfod faint o gelloedd sy'n cynnwys rhifau ffôn, does ond angen i gyfrif y gwerthoedd GWIR yn B5:B9. A gellir gwneud hynny'n hawdd gan ddefnyddio'r fformiwla COUNTIF safonol:

    =COUNTIF(B5:B9, TRUE)

    Ddim eisiau unrhyw golofnau ychwanegol yn eich taflen waith? Dim problem. Gan gadw mewn cof y gall ein swyddogaeth arferol brosesu celloedd lluosog ar y tro ac y gall SUM Excel adio gwerthoedd mewn arae, dyma beth rydych chi'n ei wneud:

    • Cyflenwi cyfeirnod ystod i RegExpMatch, felly mae'n dychwelyd a amrywiaeth o werthoedd GWIR ac ANGHYWIR.
    • Defnyddiwch negiad dwbl (--) i orfodi'r gwerthoedd rhesymegol i rai asero.
    • Cael y ffwythiant SUM i adio 1 a 0 yn yr arae canlyniadol. gyda Ultimate Suite

      Gall defnyddwyr ein Ultimate Suite drosoli pedair swyddogaeth Regex bwerus heb ychwanegu unrhyw god VBA at eu llyfrau gwaith gan eu bod yn cael eu hintegreiddio'n esmwyth i Excel yn ystod y gosodiad ychwanegu-mewn. Mae ein swyddogaethau personol yn cael eu prosesu gan yr injan .NET RegEx safonol ac yn cefnogi mynegiadau rheolaidd clasurol llawn sylw.

      Sut i ddefnyddio ffwythiant RegexMatch wedi'i deilwra

      A chymryd bod y fersiwn diweddaraf o Ultimate Suite wedi'i osod gennych ( 2021.4 neu ddiweddarach), gallwch greu fformiwla Regex Match mewn dau gam syml:

      1. Ar y tab Ablebits Data , yn y grŵp Text , cliciwch Regex Tools .

  • Ar y cwarel Regex Tools , gwnewch y canlynol:
    • Dewiswch y llinynnau ffynhonnell.
    • Rhowch eich patrwm.
    • Dewiswch yr opsiwn Match .
    • I gael y canlyniadau fel fformiwlâu, nid gwerthoedd, dewiswch y Mewnosod fel fformiwla blwch ticio.
    • Cliciwch y botwm Match .

    Munud yn ddiweddarach, mae'r ffwythiant AblebitsRegexMatch yn cael ei fewnosod mewn colofn newydd i'r dde o'ch data.

    Yn y ciplun isod, mae'r ffwythiant yn gwirio a yw'r llinynnau yng ngholofn A yn cynnwys 7-digid rhifau neu beidio.

    Awgrymiadau:

    • Y ffwc gellir mewnosod yn uniongyrchol mewn cell drwy'r blwch deialog safonol Mewnosod Swyddogaeth , lle caiff ei gategoreiddio o dan AblebitsUDFs .
    • Yn ddiofyn, mae mynegiad rheolaidd yn cael ei ychwanegu at y fformiwla, ond gallwch hefyd gadw ef mewn cell ar wahân. Ar gyfer hyn, defnyddiwch gyfeirnod cell ar gyfer yr 2il arg.
    • Yn ddiofyn, mae'r ffwythiant yn sensitif i achosion . Ar gyfer paru cas-sensitif, defnyddiwch y patrwm (?i).

    Am ragor o wybodaeth, gweler swyddogaeth AblebitsRegexMatch.

    Dyna sut i wneud paru mynegiant rheolaidd yn Excel. Diolch i chi am ddarllen ac edrychaf ymlaen at eich gweld ar ein blog wythnos nesaf!

    Ar gael i'w lawrlwytho

    Enghreifftiau Excel Regex Match (ffeil .xlsm)

    Ultimate Suite 14- fersiwn llawn-weithredol dydd (ffeil .exe)

    Os cntInputRows = mewnbwn_range.Rows.Count cntInputCols = mewnbwn_range.Columns.Count ReDim arRes(1 I cntInputRows, 1 I cntInputCols) Ar gyfer iInputCurRow = 1 I cntInputRows Ar gyfer iInputCurCol =( 1 To cntInputsrange , cntInputS ) .Cells(iInputCurRow, iInputCurCol).Gwerth) Nesaf Nesaf RegExpMatch = Swyddogaeth Gadael arRes ErrHandl: RegExpMatch = Swyddogaeth Gorffen CVErr(xlErrValue)

    Gludwch y cod yn y golygydd VBA, a'ch swyddogaeth RegExpMatch newydd yn barod i'w ddefnyddio. Os nad ydych yn brofiadol iawn gyda VBA, efallai y bydd y canllaw hwn yn ddefnyddiol: Sut i fewnosod cod VBA yn Excel.

    Nodyn. Ar ôl mewnosod y cod, cofiwch gadw eich ffeil fel llyfr gwaith macro-alluogi (.xlsm).

    Cystrawen RegExpMatch

    Mae ffwythiant RegExpMatch yn gwirio a oes unrhyw ran o'r llinyn ffynhonnell yn cyfateb i fynegiad arferol. Gwerth Boole yw'r canlyniad: GWIR os canfyddir o leiaf un cyfatebiad, GAU fel arall.

    Mae gan ein ffwythiant personol 3 arg - mae angen y ddwy gyntaf ac mae'r olaf yn ddewisol:

    RegExpMatch(testun , pattern, [match_case])

    Lle:

    • Testun (angenrheidiol) - un neu fwy o linynnau i chwilio ynddynt. Gellir ei gyflenwi fel cyfeirnod cell neu amrediad.
    • Patrwm (angenrheidiol) - y mynegiad rheolaidd i gyd-fynd. Pan gaiff ei osod yn uniongyrchol mewn fformiwla, rhaid amgáu patrwm mewn dyfynodau dwbl.
    • Match_case (dewisol) - diffinio'r cyfatebiadmath. 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, Excel 2019, Excel 2016, Excel 2013 ac Excel 2010.

    3 pheth dylech wybod am RegExpMatch

    Cyn i ni gyrraedd cyfrifiadau ymarferol, sylwch ar y pwyntiau canlynol sy'n egluro rhai manylion technegol:

    1. Gall y swyddogaeth brosesu gell sengl neu ystod o gelloedd . Yn yr achos olaf, dychwelir y canlyniadau yn y celloedd cyfagos ar ffurf arae ddeinamig, neu ystod gollyngiad, fel y dangosir yn yr enghraifft hon.
    2. Yn ddiofyn, mae'r ffwythiant yn sensitif i achos . I anwybyddu'r cas testun, gosodwch y ddadl match_case i FALSE. Oherwydd cyfyngiadau VBA Regexp, ni chefnogir y patrwm achos-sensitif (?i).
    3. Os na chanfyddir patrwm dilys, mae'r ffwythiant yn dychwelyd ANGHYWIR; os yw'r patrwm yn annilys , mae #VALUE! gwall yn digwydd.

    Isod, fe welwch ychydig o enghreifftiau regex match a grëwyd at ddibenion arddangos. Ni allwn warantu y bydd ein patrymau'n gweithio'n ddi-fai gydag ystod ehangach o ddata mewnbwn yn eich taflenni gwaith go iawn. Cyn cynhyrchu, gwnewch yn siŵr eich bod chi'n profi ac yn addasu ein patrymau samplau yn unol â'ch anghenion.

    Sut i ddefnyddio regex i baru llinynnau yn Excel

    Pan fydd gan yr holl linynnau rydych chi am eu cyfateb y yr un patrwm,mae mynegiadau rheolaidd yn ddatrysiad delfrydol.

    A chymryd bod gennych ystod o gelloedd (A5:A9) sy'n cynnwys manylion amrywiol am rai eitemau. Rydych chi eisiau gwybod pa gelloedd sydd â SKUs. Gan gymryd bod pob SKU yn cynnwys 2 brif lythyren, cysylltnod, a 3 digid, gallwch eu paru gan ddefnyddio'r mynegiad canlynol.

    Patrwm : \b[A-Z]{2}-\ d{3}\b

    Lle mae [A-Z]{2} yn golygu unrhyw 2 briflythyren o A i Z a \d{3} yn golygu unrhyw 3 digid o 0 i 9. Mae'r nod \b yn dynodi gair ffin, sy'n golygu bod SKU yn air ar wahân, ac nid yw'n rhan o linyn mwy fel 23-MAR-2022.

    Gyda'r patrwm wedi'i sefydlu, gallwn symud ymlaen i ysgrifennu fformiwla. Yn y bôn, nid yw defnyddio swyddogaeth arfer yn wahanol i un brodorol. Cyn gynted ag y byddwch yn dechrau teipio fformiwla, bydd enw'r swyddogaeth yn ymddangos yn y rhestr a awgrymir gan Excel's AutoComplete. Fodd bynnag, mae yna un neu ddau o arlliwiau yn Dynamic Array Excel (Microsoft 365 ac Excel 2021) ac Excel traddodiadol (2019 a fersiynau hŷn).

    Cyfateb llinyn mewn un gell

    I gyd-fynd â llinyn mewn un gell, cyfeiriwch at y gell honno yn y ddadl gyntaf. Mae'r ail arg i fod i gynnwys mynegiant rheolaidd.

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Gellir cadw'r patrwm hefyd mewn cell rhagddiffiniedig, sydd wedi'i chloi â chyfeirnod absoliwt ($A$2):<3

    =RegExpMatch(A5, $A$2)

    Ar ôl mynd i mewn i'r fformiwla yn y gell gyntaf, gallwch ei lusgo i lawr i bob rhes arall.

    Y dull hwnyn gweithio'n hyfryd ym pob fersiwn Excel .

    Cyfateb llinynnau mewn celloedd lluosog ar unwaith

    I baru llinynnau lluosog ag un fformiwla, cynnwys cyfeirnod amrediad yn y ddadl gyntaf:

    =RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")

    Yn Excel 365 ac Excel 2021 sy'n cynnal araeau deinamig, mae'n gweithio fel hyn - rydych chi'n teipio'r fformiwla yn y gell gyntaf, yn taro Enter , ac mae'r fformiwla'n gollwng yn awtomatig i'r celloedd isod. yn gweithio fel fformiwla arae CSE traddodiadol yn unig, sy'n cael ei fewnbynnu mewn ystod o gelloedd a'i chwblhau trwy wasgu'r bysellau Ctrl + Shift + Enter gyda'i gilydd.

    Regex i gyd-fynd â'r rhif

    I gyd-fynd ag unrhyw ddigid unigol o 0 i 9, defnyddiwch y nod \d yn y regex. Yn dibynnu ar eich tasg benodol, ychwanegwch feintydd addas neu crëwch batrwm mwy cymhleth.

    Regex i gydweddu ag unrhyw rif

    I gydweddu ag unrhyw nifer o unrhyw hyd, rhowch y meintiolydd + yn union ar ôl y / d nod, sy'n dweud i chwilio am rifau sy'n cynnwys 1 digid neu fwy.

    Patrwm : \d+

    =RegExpMatch(A5:A9, "\d+")

    Regex i gyd-fynd â nifer hyd penodol

    Os mai eich nod yw cyfateb gwerthoedd rhifol sy'n cynnwys nifer penodol o ddigidau, yna defnyddiwch \d ynghyd â meintiolydd priodol.

    Er enghraifft, i gyd-fynd â rhifau anfoneb sy'n cynnwys 7 digid yn union, byddech yn defnyddio \d{7}. Fodd bynnag, cofiwch y bydd yn cyfateb i 7yn ôl y disgwyl:

    Nodiadau:

    • Nid yw codau rhyngwladol yn cael eu gwirio, felly efallai eu bod yn bresennol neu beidio.
    • Mewn ymadroddion rheolaidd, mae \s yn golygu unrhyw gymeriad gofod gwyn fel gofod, tab, dychweliad cerbyd, neu linell newydd. I ganiatáu bylchau yn unig, defnyddiwch [-\. ] yn lle [-\.\s].
    • Regex i BEIDIO â chyfateb nod

      I ddod o hyd i linynnau NAD ydynt yn cynnwys nod penodol, gallwch ddefnyddio dosbarthiadau nodau negyddedig [^ ] sy'n cyfateb unrhyw beth NID mewn cromfachau. Er enghraifft: bydd

      • [^13] yn cyfateb i unrhyw nod unigol nad yw'n 1 neu 3.
      • [^1-3] yn cyfateb i unrhyw nod unigol nad yw'n 1, 2 neu 3 (h.y. unrhyw ddigid o 1 i 3).

      Mewn rhestr o rifau ffôn, mae'n debyg eich bod am ddod o hyd i'r rhai nad oes ganddynt god gwlad. Gan gadw mewn cof bod unrhyw god rhyngwladol yn cynnwys yr arwydd +, gallwch ddefnyddio'r dosbarth nod [^\+] i ddod o hyd i linynnau nad ydynt yn cynnwys arwydd plws. Mae'n bwysig sylweddoli bod y mynegiant uchod yn cyfateb i unrhyw gymeriad unigol nad yw'n +. Oherwydd y gall rhif ffôn fod yn unrhyw le mewn llinyn, nid o reidrwydd yn y cychwyn cyntaf, ychwanegir y meintiolydd * i wirio pob nod dilynol. Mae'r angorau dechrau ^ a diwedd $ yn sicrhau bod y llinyn cyfan yn cael ei brosesu. O ganlyniad, rydym yn cael y mynegiad rheolaidd isod sy'n dweud "ddim yn cyfateb i'r nod + mewn unrhyw safle yn y llinyn".

      Patrwm :^[^\+]*$

      =RegExpMatch(A5, "^[^\+]*$")

      Regex i DDIM cyfateb llinyn

      Er nad oes cystrawen mynegiant rheolaidd arbennig ar gyfer heb fod yn cyfateb i linyn penodol, gallwch efelychu'r ymddygiad hwn drwy ddefnyddio golwg negatif.

      A chymryd eich bod am ddod o hyd i linynnau nad yw yn cynnwys y gair "lemons". Bydd y mynegiant rheolaidd hwn yn bleser:

      Patrwm : ^((?!lemons).)*$

      Yn amlwg, mae angen rhywfaint o eglurhad yma. Mae'r edrychiad negyddol (?!lemons) yn edrych i'r dde i weld os nad oes gair "lemons" o'ch blaen. Os nad yw "lemons" yno, yna mae'r dot yn cyfateb i unrhyw gymeriad ac eithrio toriad llinell. Mae'r mynegiad uchod yn perfformio un gwiriad yn unig, ac mae'r meintiolydd * yn ei ailadrodd sero neu fwy o weithiau, o ddechrau'r llinyn wedi'i angori gan ^ i ddiwedd y llinyn sydd wedi'i angori gan $.

      I anwybyddu'r cas testun, rydym yn gosod y 3edd ddadl i ANGHYWIR i wneud ein swyddogaeth yn ansensitif o ran achosion:

      =RegExpMatch(A5, $A$2, FALSE)

      Awgrymiadau a nodiadau:

      • Mae'r regex uchod yn gweithio ar gyfer llinynnau llinell sengl yn unig. Yn achos llinynnau milti-line, mae'r nodau ^ a $ yn cyfateb i ddechrau a diwedd pob llinell yn lle dechrau a diwedd y llinyn mewnbwn, felly dim ond yn y llinell gyntaf y mae'r regex yn chwilio.
      • I baru llinynnau nad yw yn cychwyn gyda thestun arbennig , defnyddiwch fynegiad rheolaidd fel ^(?!lemons).*$
      • I baru llinynnau nad yw yn gorffen gyda thestun penodol , cynhwyswchmae'r llinyn olaf yn angori'r patrwm chwilio: ^((?!lemons$).)*$

      Achos ansensitif yn paru

      Mewn ymadroddion rheolaidd clasurol, mae patrwm arbennig ar gyfer paru achos-ansensitif (?i), nad yw'n cael ei gefnogi yn VBA RegExp. I oresgyn y cyfyngiad hwn, mae ein ffwythiant personol yn derbyn y 3edd ddadl ddewisol o'r enw match_case . I wneud paru achos-sensitif, gosodwch ef i ANGHYWIR.

      Dewch i ni ddweud eich bod am nodi dyddiadau fel 1-Mar-22 neu 01-MAR-2022. I gyd-fynd â'r fformatau dd-mmm-bbbb a d-mmm-bb , rydym yn defnyddio'r mynegiant rheolaidd canlynol.

      Patrwm : \b\d{1,2}-(Ionawrdigidau unrhyw le yn y llinyn gan gynnwys rhif 10 digid neu 100-digid. Os nad dyma'r hyn yr ydych yn chwilio amdano, rhowch y gair ffin \b ar y ddwy ochr.

      Patrwm : \b\d{7}\b

      =RegExpMatch(A5:A9, "\b\d{7}\b")

      Regex i gyd-fynd â rhifau ffôn

      Gan fod modd ysgrifennu rhifau ffôn mewn fformatau amrywiol, mae angen mynegiant rheolaidd mwy soffistigedig er mwyn eu paru.

      Yn y set ddata isod, byddwn yn chwilio am rifau 10 digid sydd â 3 digid yn y 2 grŵp cyntaf a 4 digid yn y grŵp olaf. Gellir gwahanu'r grwpiau gyda chyfnod, cysylltnod neu ofod. Mae'n bosibl bod y grŵp cyntaf wedi'i amgáu mewn cromfachau neu beidio.

      Patrwm: (\(\d{3}\)

    Mae Michael Brown yn frwd dros dechnoleg ymroddedig ac yn frwd dros symleiddio prosesau cymhleth gan ddefnyddio offer meddalwedd. Gyda mwy na degawd o brofiad yn y diwydiant technoleg, mae wedi hogi ei sgiliau yn Microsoft Excel ac Outlook, yn ogystal â Google Sheets a Docs. Mae blog Michael yn ymroddedig i rannu ei wybodaeth a'i arbenigedd ag eraill, gan ddarparu awgrymiadau a thiwtorialau hawdd eu dilyn ar gyfer gwella cynhyrchiant ac effeithlonrwydd. P'un a ydych chi'n weithiwr proffesiynol profiadol neu'n ddechreuwr, mae blog Michael yn cynnig mewnwelediadau gwerthfawr a chyngor ymarferol ar gyfer cael y gorau o'r offer meddalwedd hanfodol hyn.