Regex për nxjerrjen e vargjeve në Excel (një ose të gjitha ndeshjet)

  • Shperndaje Kete
Michael Brown

Në këtë tutorial, do të mësoni se si të përdorni shprehje të rregullta në Excel për të gjetur dhe nxjerrë nënvargje që përputhen me një model të caktuar.

Microsoft Excel ofron një sërë funksionesh për të nxjerrë tekstin nga qelizat. Këto funksione mund të përballen me shumicën e sfidave të nxjerrjes së vargut në fletët tuaja të punës. Shumica, por jo të gjitha. Kur funksionet e tekstit pengohen, shprehjet e rregullta vijnë në shpëtim. Prisni… Excel nuk ka funksione RegEx! Vërtetë, nuk ka funksione të integruara. Por nuk ka asgjë që do t'ju pengonte të përdornit tuajat :)

    Funksioni Excel VBA Regex për nxjerrjen e vargjeve

    Për të shtuar një funksion të personalizuar Regex Extract në Excel tuaj, ngjisni kodin e mëposhtëm në redaktorin VBA. Për të aktivizuar shprehjet e rregullta në VBA, ne po përdorim objektin e integruar të Microsoft RegExp.

    Funksioni publik RegExpExtract(teksti si varg, modeli si varg, shembulli_num opsional si numër i plotë = 0, rasti_fakultativ i përputhjes si Boolean = i vërtetë) Dim text_matches() Si varg Dim matches_index Si numër i plotë në gabim Shkoni në ErrHandl RegExpExtract = "" Vendos regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = model regex.Global = True regex.MultiLine = Përputhje e vërtetë Nëse e vërtetë. ignorecase = E gabuar Tjetër regex.ignorecase = Fundi i vërtetë nëse Set përputhet = regex.Execute(tekst) Nëse 0 < përputhet.Numëroni Pastaj Nëse (0 = shembull_num) Pastaj ReDim text_matches( matches.Count - 1, 0) Për matches_index = 0VBA RegExp, ju inkurajoj të lexoni pjesën tjetër që diskuton funksione shumë më të fuqishme .NET Regex.

    Funksioni Regex i personalizuar i bazuar në .NET për nxjerrjen e tekstit në Excel

    Ndryshe nga funksionet VBA RegExp që mund të shkruhet nga çdo përdorues i Excel, .NET RegEx është sfera e zhvilluesit. Microsoft .NET Framework mbështet sintaksën e shprehjeve të rregullta me funksione të plota të përputhshme me Perl 5. Ky artikull nuk do t'ju mësojë se si të shkruani funksione të tilla (Unë nuk jam programues dhe nuk kam asnjë ide se si ta bëj këtë :)

    Katër funksione të fuqishme të përpunuara nga motori standard .NET RegEx janë shkruar tashmë nga zhvilluesit tanë dhe janë përfshirë në Ultimate Suite. Më poshtë, do të demonstrojmë disa përdorime praktike të funksionit të krijuar posaçërisht për nxjerrjen e tekstit në Excel.

    Këshillë. Për informacion në lidhje me sintaksën .NET Regex, ju lutemi referojuni .NET Regular Expression Language.

    Si të nxirrni thumbimet në Excel duke përdorur shprehje të rregullta

    Duke supozuar se keni të instaluar versionin më të fundit të Ultimate Suite, nxjerrja e tekstit duke përdorur shprehje të rregullta zbret në këto dy hapa:

    1. Në skedën Ablebits Data , në grupin Text , klikoni Regex Tools .
    2. Në panelin Regex Tools , zgjidhni të dhënat burimore, futni modelin tuaj Regex dhe zgjidhni opsionin Ekstrakt . Për të marrë rezultatin si një funksion të personalizuar, jo një vlerë, zgjidhni kontrollin Fut si formulë kuti. Kur të keni mbaruar, klikoni butonin Ekstrakt .

    Rezultatet do të shfaqen në një kolonë të re në të djathtë të të dhënave tuaja origjinale:

    Sintaksa AblebitsRegexExtract

    Funksioni ynë i personalizuar ka sintaksën e mëposhtme:

    AblebitsRegexExtract(referencë, shprehje_i rregullt)

    Ku:

    • Referencë (kërkohet) - një referencë për qelizën që përmban vargun burimor.
    • Shprehja_e_rregullt (kërkohet) - modeli regex të përputhet.

    Shënim i rëndësishëm! Funksioni funksionon vetëm në makinat me Ultimate Suite për Excel të instaluar.

    Shënime të përdorimit

    Për ta bërë kurbën tuaj të të mësuarit më të qetë dhe përvojën tuaj më të këndshme, kushtojini vëmendje këtyre pikave:

    1. Për të krijuar një formulë, mund të përdorni Mjetet tona Regex ose dialogun Fut funksionin të Excel, ose shkruani emrin e plotë të funksionit në një qelizë. Pasi të futet formula, mund ta menaxhoni atë (ndryshoni, kopjoni ose zhvendosni) si çdo formulë origjinale.
    2. Modeli që futni në panelin Mjetet Regex shkon në argumentin e dytë. Është gjithashtu e mundur të mbash një shprehje të rregullt në një qelizë të veçantë. Në këtë rast, thjesht përdorni një referencë qelize për argumentin e dytë.
    3. Funksioni nxjerr përputhjen e parë të gjetur .
    4. Si parazgjedhje, funksioni është rast -sensitive . Për përputhjen e pandjeshme ndaj shkronjave, përdorni modelin (?i).
    5. Nëse një përputhje nuk gjendet, një gabim #N/A ështëu kthye.

    Regex për të nxjerrë vargun midis dy karaktereve

    Për të marrë tekst midis dy karaktereve, mund të përdorni ose një grup fotografik ose një vështrim përreth.

    Le të bëjmë thoni se po kërkoni të nxirrni tekstin midis kllapave. Një grup kapës është mënyra më e lehtë.

    Modeli 1 : \[(.*?)\]

    Me një vështrim pozitiv pas dhe përpara, rezultati do të jetë saktësisht e njëjta gjë.

    Modeli 2 : (?<=\[)(.*?)(?=\])

    Ju lutemi kushtoni vëmendje që grupi ynë i kapjes (.*?) kryen një kërkim dembel për tekstin midis dy kllapave - nga e para [ tek e para ]. Një grup kapës pa një pikëpyetje (.*) do të bënte një kërkim të pangopur dhe do të kapte gjithçka nga i pari [ tek i fundit ].

    Me modelin në A2, formula shkon si vijon:

    =AblebitsRegexExtract(A5, $A$2)

    Si të merrni të gjitha ndeshjet

    Siç është përmendur tashmë, funksioni AblebitsRegexExtract mund të nxjerrë vetëm një përputhje. Për të marrë të gjitha ndeshjet, mund të përdorni funksionin VBA që kemi diskutuar më parë. Megjithatë, ka një paralajmërim - VBA RegExp nuk mbështet kapjen e grupeve, kështu që modeli i mësipërm do të kthejë edhe karakteret "kufitare", kllapa në rastin tonë.

    =TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))

    Për të hequr qafe të kllapave, ZËVENDËSOJI ato me vargje boshe ("") duke përdorur këtë formulë:

    =SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")

    Për lexueshmëri më të mirë, ne përdorim një presje për ndarës.

    Regex për të nxjerrë tekstin midis dy vargjeve

    Qasja që kemi punuarinterpretojeni fjalë për fjalë).

  • (?:[A-Za-z\d\-\.]{2,255}\.)? - grup që nuk kap për të identifikuar domenet e nivelit të tretë, të katërt, etj., nëse ka ( celular në URL-në tonë të mostrës). Në modelin e parë, ai vendoset brenda një grupi më të madh kapës për të përfshirë të gjitha nënfushat e tilla në nxjerrje. Një nën-domein mund të jetë nga 2 deri në 255 karaktere, pra sasia {2255}.
  • ([A-Za-z\d\-]{1,63}\.[A-Za-z] {2,24}) - kapja e grupit për të nxjerrë domenin e nivelit të dytë ( ablebits ) dhe domenin e nivelit të lartë ( com ). Gjatësia maksimale e një domeni të nivelit të dytë është 63 karaktere. Domeni më i gjatë i nivelit të lartë që ekziston aktualisht përmban 24 karaktere.
  • Në varësi të cilës shprehje të rregullt futet në A2, formula e mëposhtme do të prodhojë rezultate të ndryshme:

    =AblebitsRegexExtract(A5, $A$2)

    Regex për të nxjerrë emrin e plotë të domenit me të gjitha nëndomenet:

    Regex për të nxjerrë një domen të nivelit të dytë domain pa nënfushat:

    Kjo është se si të nxirrni pjesë të tekstit në Excel duke përdorur shprehje të rregullta. Ju falënderoj që lexoni dhe mezi pres t'ju shohim në blogun tonë javën e ardhshme!

    Shkarkimet e disponueshme

    Shembuj të Excel Regex Extract (skedari .xlsm)

    Versioni i provës Ultimate Suite (skedar .exe)

    \b(0?[0-9]matches.Count - 1 text_matches( matches_index, 0) = matches.Item( matches_index) Next matches_index RegExpExtract = tekst_përputhet Tjetër RegExpExtract = ndeshje.Artikulli(numri_shembull - 1) Fundi If Fund Nëse Dil Funksioni ErrHandl: ReguexElp

    Nëse keni pak përvojë me VBA, një udhëzues përdoruesi hap pas hapi mund të jetë i dobishëm: Si të futni kodin VBA në Excel.

    Shënim. Që funksioni të funksionojë, sigurohuni që ta ruani skedarin tuaj si një libër pune i aktivizuar me makro (.xlsm).

    Sintaksa RegExpExtract

    Funksioni RegExpExtract kërkon një varg hyrës për vlerat që përputhen me një shprehje të rregullt dhe nxjerr një ose të gjitha ndeshjet.

    Funksioni ka sintaksën e mëposhtme :

    RegExpExtract(tekst, model, [numri_shembull], [match_case])

    Ku:

    • Tekst (kërkohet) - vargu i tekstit për të kërkuar.
    • Modeli (kërkohet) - shprehja e rregullt që përputhet. Kur jepet drejtpërdrejt në një formulë, modeli duhet të mbyllet në thonjëza të dyfishta.
    • Numri_shembull (opsionale) - një numër serial që tregon se cilin shembull duhet nxjerrë. Nëse hiqet, kthen të gjitha përputhjet e gjetura (parazgjedhja).
    • Ndeshja_rasti (opsionale) - përcakton nëse do të përputhet apo do të shpërfillet shkronja e tekstit. Nëse E VËRTETË ose është lënë jashtë (e parazgjedhur), kryhet përputhja e ndjeshme ndaj rasteve; nëse FALSE - nuk ka rëndësi të madhe.

    Funksioni funksionon në të gjitha versionet e Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 dhe Excel 2010.

    4 gjëra që duhet të dini rreth RegExpExtract

    Për të përdorur në mënyrë efektive funksionin në Excel, ka disa gjëra të rëndësishme për t'u marrë parasysh:

    1. Si parazgjedhje, funksioni kthen të gjitha ndeshjet e gjetura në qelizat fqinje, siç tregohet në këtë shembull. Për të marrë një ndodhi specifike, jepni një numër përkatës në argumentin num_instance .
    2. Si parazgjedhje, funksioni është ndjeshëm ndaj shkronjave të vogla . Për përputhjen e pandjeshme ndaj shkronjave, vendosni argumentin match_case në FALSE. Për shkak të kufizimeve të VBA, konstrukti i pandjeshëm ndaj shkronjave të mëdha (?i) nuk do të funksionojë.
    3. Nëse një model i vlefshëm nuk gjendet , funksioni nuk kthen asgjë (varg bosh).
    4. Nëse modeli është i pavlefshëm , një #VALUE! ndodh gabim.

    Para se të filloni të përdorni këtë funksion të personalizuar në fletët tuaja të punës, duhet të kuptoni se për çfarë është i aftë, apo jo? Shembujt e mëposhtëm mbulojnë disa raste të përdorimit të zakonshëm dhe shpjegojnë pse sjellja mund të ndryshojë në Excel (Microsoft 365 dhe Excel 2021) dhe Excel tradicional (2019 dhe versione më të vjetra).

    Shënim. Shembujt jashtë regex janë shkruar për grupe të dhënash mjaft të thjeshta. Ne nuk mund të garantojmë se do të funksionojnë pa të meta në fletët tuaja reale të punës. Ata që kanë përvojë me regex do të pajtohen se shkrimi i shprehjeve të rregullta është një rrugë e pafundme drejt përsosmërisë - pothuajse gjithmonë ka një mënyrë për të bërëështë më elegant ose i aftë për të trajtuar një gamë më të gjerë të dhënash hyrëse.

    Regex për të nxjerrë numrin nga vargu

    Duke ndjekur maksimën bazë të mësimdhënies "nga e thjeshta në komplekse", do të fillojmë me një rast shumë të thjeshtë: nxjerrjen e numrit nga vargu.

    Gjëja e parë që ju duhet të vendosni është se cili numër të rikuperoni: i pari, i fundit, dukuri specifike ose të gjithë numrat.

    Nxjerrja e numrit të parë

    Kjo është aq e thjeshtë sa mund të marrë regex. Duke pasur parasysh se \d do të thotë çdo shifër nga 0 në 9, dhe + do të thotë një ose më shumë herë, shprehja jonë e rregullt merr këtë formë:

    Modeli : \d+

    Set instance_num në 1 dhe do të merrni rezultatin e dëshiruar:

    =RegExpExtract(A5, "\d+", 1)

    Aty ku A5 është vargu origjinal.

    Për lehtësi, mund të futni modelin në një qelizë të paracaktuar ($A$2 ) dhe kyçni adresën e saj me shenjën $:

    =RegExpExtract(A5, $A$2, 1)

    Merr numrin e fundit

    Për të nxjerrë numrin e fundit në një varg , këtu është modeli për t'u përdorur:

    Modeli : (\d+)(?!.*\d)

    Përkthyer në një gjuhë njerëzore , thotë: gjeni një numër që nuk ndiqet (kudo, jo menjëherë) nga ndonjë numër tjetër. Për ta shprehur këtë, ne përdorim një vështrim negativ (?!.*\d), që do të thotë se në të djathtë të modelit nuk duhet të ketë asnjë shifër tjetër (\d) pavarësisht se sa karaktere të tjera janë përpara saj.

    =RegExpExtract(A5, "(\d+)(?!.*\d)")

    Këshilla:

    • Për të marrë një ngjarje specifike , përdorni \d+ për modelin dhe një serial të përshtatshëmnumri për numri_shembull .
    • Formula për të nxjerrë të gjithë numrat diskutohet në shembullin vijues.

    Regex për të nxjerrë të gjitha ndeshjet

    Duke shtyrë shembullin tonë pak më tej, supozoni se dëshironi të merrni të gjithë numrat nga një varg, jo vetëm një.

    Siç mund ta mbani mend, numri i ndeshjeve të nxjerra kontrollohet nga opsioni opsional <1 Argumenti>num_instance . Parazgjedhja është e gjitha përputhet, kështu që ju thjesht hiqni këtë parametër:

    =RegExpExtract(A2, "\d+")

    Formula funksionon bukur për një qelizë të vetme, por sjellja ndryshon në Excel dhe versionet jodinamike.

    Excel 365 dhe Excel 2021

    Për shkak të mbështetjes për vargje dinamike, një formulë e rregullt derdhet automatikisht në aq qeliza sa nevojitet për të shfaqur të gjitha rezultatet e llogaritura. Për sa i përket Excel, kjo quhet një interval i derdhur:

    Excel 2019 dhe më i ulët

    Në Excel para-dinamik, formula e mësipërme do të kthente vetëm një përputhje. Për të marrë përputhje të shumta, duhet ta bëni atë një formulë grupi. Për këtë, zgjidhni një varg qelizash, shkruani formulën dhe shtypni Ctrl + Shift + Enter për ta përfunduar atë.

    Një anë negative e kësaj qasjeje është një sërë gabimesh #N/A që shfaqen në "qelizat shtesë" . Fatkeqësisht, asgjë nuk mund të bëhet për këtë (as IFERROR dhe as IFNA nuk mund ta rregullojnë atë, mjerisht).

    Ekstraktoni të gjitha ndeshjet në një qelizë

    Kur përpunoni një kolonë të dhënash, qasja e mësipërme padyshim nuk do të funksionojë. Në këtë rast, një zgjidhje idealedo të kthente të gjitha ndeshjet në një qelizë të vetme. Për ta bërë këtë, shërbeni rezultatet e RegExpExtract në funksionin TEXTJOIN dhe ndani ato me çdo kufizues që ju pëlqen, thoni një presje dhe një hapësirë:

    =TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))

    Shënim. Për shkak se funksioni TEXTJOIN disponohet vetëm në Excel për Microsoft 365, Excel 2021 dhe Excel 2019, formula nuk do të funksionojë në versionet e vjetra.

    Regex për të nxjerrë tekstin nga vargu

    Nxjerrja e tekstit nga një varg alfanumerik është një detyrë mjaft sfiduese në Excel. Me regex, bëhet po aq e lehtë sa byreku. Thjesht përdorni një klasë të mohuar për të përputhur gjithçka që nuk është shifër.

    Modeli : [^\d]+

    Për të marrë nënvargje në qeliza individuale (gama e derdhjes) , formula është:

    =RegExpExtract(A5, "[^\d]+")

    Për të nxjerrë të gjitha ndeshjet në një qelizë, futni funksionin RegExpExtract në TEXTJOIN si kjo:

    =TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))

    Regex në nxirrni adresën e emailit nga vargu

    Për të nxjerrë një adresë emaili nga një varg që përmban shumë informacione të ndryshme, shkruani një shprehje të rregullt që përsërit strukturën e adresës së emailit.

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

    Zbërthimi i këtij regex , ja çfarë marrim:

    • [\w\.\-]+ është një emër përdoruesi që mund të përfshijë 1 ose më shumë karaktere alfanumerike, nënvizime, pika dhe viza.
    • @ simboli.
    • [A-Za-z0-9\.\-]+ është një emër domaini që përbëhet nga: shkronja të mëdha dhe të vogla, shifra, viza dhe pika (në raste nëndimeneve). Nënvizat nuk lejohen këtu, prandaj përdoren 3 grupe të ndryshme karakteresh (si A-Z a-z dhe 0-9) në vend të \w që përputhet me çdo shkronjë, shifër ose nënvizim.
    • \.[A-Za-z. ]{2,24} është një domen i nivelit të lartë. Përbëhet nga një pikë e ndjekur nga shkronja të mëdha dhe të vogla. Shumica e domeneve të nivelit të lartë janë me 3 shkronja (p.sh. .com .org, .edu, etj.), por në teori mund të përmbajë nga 2 deri në 24 shkronja (TLD-ja më e gjatë e regjistruar).

    Duke supozuar se vargu është në A5 dhe modeli në A2, formula për të nxjerrë një adresë emaili është:

    =RegExpExtract(A5, $A$2)

    Regex për të nxjerrë domenin nga emaili

    Kur ai ka të bëjë me nxjerrjen e domenit të postës elektronike, mendimi i parë që vjen në mendje është përdorimi i një grupi kapës për të gjetur tekstin që ndjek menjëherë karakterin @.

    Modeli : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})

    Shërbejeni atë në funksionin tonë RegExp:

    =RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")

    Dhe do të merrni këtë rezultat:

    Me shprehjet e rregullta klasike, çdo gjë jashtë një grupi kapës nuk përfshihet në nxjerrje. Askush nuk e di pse VBA RegEx funksionon ndryshe dhe kap gjithashtu "@". Për ta hequr qafe atë, mund të hiqni karakterin e parë nga rezultati duke e zëvendësuar me një varg bosh.

    =REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")

    Shprehje e rregullt për nxjerrjen e numrave të telefonit

    Numrat e telefonit mund të shkruhet në shumë mënyra të ndryshme, kjo është arsyeja pse është pothuajse e pamundur të dalësh me një zgjidhje që funksionon nën të gjitha(\d{4}from string

    Një shprehje e rregullt për nxjerrjen e një date varet nga formati në të cilin data shfaqet brenda një vargu. Për shembull:

    Për të nxjerrë data si 1/1/21 ose 01/01/2021, regex është: \d{1,2}\/\d{1,2}\/(\d {4}rrethanat. Megjithatë, ju mund të shkruani të gjitha formatet e përdorura në grupin tuaj të të dhënave dhe të përpiqeni t'i përputhni ato.

    Për këtë shembull, ne do të krijojmë një regex që do të nxjerrë numrat e telefonit në cilindo nga këto formate:

    (123) 345-6789

    (123) 345 6789

    (123)3456789

    123- 345-6789

    123.345.6789

    123 345 6789

    1233456789

    Modeli : \(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b

    • Pjesa e parë \(?\d{3} përputhet me zero ose një kllapa hapëse e ndjekur nga tre shifra d{3}.
    • Pjesa [-\. \)]* nënkupton çdo karakter në kllapa katrore që shfaqet 0 ose më shumë herë: vizë, pikë, hapësirë ​​ose kllapa mbyllëse.
    • Më pas, kemi përsëri tre shifra d{3} e ndjekur nga çdo vizë, pikë ose hapësirë ​​[-\. ]? shfaqet 0 ose 1 herë.
    • Pas kësaj, ekziston një grup prej katër shifrash \d{4}.
    • Më në fund, ekziston një kufi fjalësh \b që përcakton se një numër telefoni ne jemi kërkimi nuk mund të jetë pjesë e një numri më të madh.

    Formula e plotë merr këtë formë:

    =RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")

    Ju lutemi, kini parasysh se regeksi i mësipërm mund të kthejë disa rezultate false-pozitive si 123) 456 7899 ose (123 456 7899. Versioni i mëposhtëm i rregullon këto probleme. Megjithatë, kjo sintaksë funksionon vetëm në funksionet VBA RegExp, jo në shprehje të rregullta klasike.

    Modeli : (\(\d{3}\)out për nxjerrjen e tekstit midis dy karaktereve do të funksionojë gjithashtu për nxjerrjen e tekstit midis dy vargjeve.

    Për shembull, për të marrë gjithçka midis "testit 1" dhe "testit 2", përdorni shprehjen e rregullt vijuese.

    Modeli : testi 1(.*?)testi 2

    Formula e plotë është:

    =AblebitsRegexExtract(A5, "test 1(.*?)test 2")

    Regex për të nxjerrë domenin nga URL-ja

    Edhe me shprehje të rregullta, nxjerrja e emrave të domain nga URL-të nuk është një detyrë e parëndësishme. Elementi kryesor që bën mashtrimin është mos kapja e grupeve. Në varësi të qëllimit tuaj përfundimtar, zgjidhni një nga regjimet e mëposhtëm.

    Për të marrë një emër të plotë domeni duke përfshirë nënfushat

    Modeli : (?: https?\:

    Michael Brown është një entuziast i përkushtuar i teknologjisë me një pasion për thjeshtimin e proceseve komplekse duke përdorur mjete softuerike. Me më shumë se një dekadë përvojë në industrinë e teknologjisë, ai ka përmirësuar aftësitë e tij në Microsoft Excel dhe Outlook, si dhe Google Sheets dhe Docs. Blogu i Michael është i përkushtuar ndaj ndarjes së njohurive dhe ekspertizës së tij me të tjerët, duke ofruar këshilla dhe mësime të thjeshta për t'u ndjekur për të përmirësuar produktivitetin dhe efikasitetin. Pavarësisht nëse jeni një profesionist me përvojë apo fillestar, blogu i Michael ofron njohuri të vlefshme dhe këshilla praktike për të përfituar sa më shumë nga këto mjete softuerike thelbësore.