Regex Excel-en kateak ateratzeko (partida bat edo guztiak)

  • Partekatu Hau
Michael Brown

Tutorial honetan, Excel-en adierazpen erregularrak nola erabiltzen ikasiko duzu eredu jakin batekin bat datozen azpikateak aurkitzeko eta ateratzeko.

Microsoft Excel-ek hainbat funtzio eskaintzen ditu testua ateratzeko. zeluletatik. Funtzio horiek zure lan-orrietako kateak erauzteko erronka gehienei aurre egin diezaiekete. Gehienak, baina ez guztiak. Testu-funtzioek estropezu egiten dutenean, adierazpen erregularrak salbatzera etortzen dira. Itxaron... Excel-ek ez du RegEx funtziorik! Egia da, ez dago barneko funtziorik. Baina ez dago zureak erabiltzea eragotziko dizun ezer :)

    Excel VBA Regex funtzioa kateak ateratzeko

    Excel-en Regex Extract funtzio pertsonalizatu bat gehitzeko, itsatsi hurrengo kodea VBA editorean. Adierazpen erregularrak VBAn gaitzeko, Microsoft RegExp objektu integratua erabiltzen ari gara.

    Funtzio publikoa RegExpExtract(testua String gisa, eredua String gisa, Aukerako instance_num Integer gisa = 0, Aukerakoa match_case Boolean gisa = True) Dim text_matches() As String Dim matchs_index As Integer Akatsean GoTo ErrHandl RegExpExtract = "" Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = eredua regex.Global = True regex.MultiLine = True If True = match_case Then regex. ignorecase = Faltsua Bestela regex.ignorecase = Egia Amaiera Ezarri bada bat dator = regex.Execute (testua) 0 bada < matchs.Count Then If (0 = instance_num) Then ReDim text_matches(matches.Count - 1, 0) For matchs_index = 0 ToVBA RegExp, .NET RegEx funtzio indartsuagoak aztertzen dituen hurrengo zatia irakurtzera animatzen zaitut.

    Excel-en testua ateratzeko .NET oinarritutako Regex funtzio pertsonalizatua

    VBA RegExp funtzioak ez bezala. Excel edozein erabiltzailek idatzi dezake, .NET RegEx garatzailearen erreinua da. Microsoft .NET Framework-ek Perl 5-rekin bateragarria den adierazpen erregular sintaxi osoak onartzen ditu. Artikulu honek ez dizu halako funtzioak nola idazten irakatsiko (ez naiz programatzailea eta ez daukat hori nola egin jakiteko ideia txikiena ere :)

    .NET RegEx motor estandarrak prozesatutako lau funtzio indartsu dagoeneko gure garatzaileek idatzi dituzte eta Ultimate Suite-n sartuta daude. Jarraian, Excel-en testua ateratzeko bereziki diseinatutako funtzioaren erabilera praktiko batzuk erakutsiko ditugu.

    Aholkua. .NET Regex sintaxiari buruzko informazio gehiago lortzeko, ikusi .NET Adierazpen Erregular Lengoaiara.

    Nola atera ziztadak Excel-en adierazpen erregularrak erabiliz

    Ultimate Suite-ren azken bertsioa instalatuta daukazula suposatuz, esamolde erregularrak erabiliz testua ateratzea bi urrats hauetara laburtzen da:

    1. Ablebits Data fitxan, Testua taldean, sakatu Regex tresnak .
    2. Regex Tresnak panelean, hautatu iturburuko datuak, sartu zure Regex eredua eta aukeratu Atera aukera. Emaitza funtzio pertsonalizatu gisa lortzeko, ez balio gisa, hautatu Txertatu formula gisa egiaztapenakutxa. Amaitutakoan, egin klik Atera botoian.

    Emaitzak zutabe berri batean agertuko dira zure jatorrizko datuen eskuinean:

    AblebitsRegexExtract sintaxia

    Gure funtzio pertsonalizatuak sintaxia hau du:

    AblebitsRegexExtract(erreferentzia, adierazpen_erregularra)

    Non:

    • Erreferentzia (beharrezkoa) - iturburu-katea duen gelaxkaren erreferentzia.
    • Adierazpen_erregularra (beharrezkoa) - bat etorriko den regex eredua.

    Ohar garrantzitsua! Funtzioak Ultimate Suite for Excel instalatuta duten makinetan bakarrik funtzionatzen du.

    Erabilera oharrak

    Zure ikasketa-kurba leunagoa izan dadin eta esperientzia atseginagoa izan dadin, jarri arreta puntu hauei:

    1. Formula bat sortzeko, gure Regex Tresnak edo Excel-en Txertatu funtzioa elkarrizketa-koadroa erabil dezakezu edo idatzi funtzioaren izen osoa gelaxka batean. Formula txertatu ondoren, kudea dezakezu (editatu, kopiatu edo mugitu) jatorrizko edozein formula bezala.
    2. Regex Tresnak panelean sartzen duzun eredua 2. argumentura doa. Adierazpen erregular bat gelaxka bereizi batean gordetzea ere posible da. Kasu honetan, erabili gelaxka-erreferentzia bat 2. argumenturako.
    3. Funtzioak aurkitutako lehen partida ateratzen du.
    4. Lehenespenez, funtzioa maiuskulaz eta kasua da. -sentikorra . Maiuskulak eta minuskulak bereizten ez dituen bat etortzeko, erabili (?i) eredua.
    5. Etorkizunik ez bada aurkitzen, #N/A errorea izango da.itzuli da.

    Regex bi karaktereren arteko katea ateratzeko

    Bi karaktereren arteko testua lortzeko, harrapatzeko talde bat edo inguruko begirada bat erabil dezakezu.

    Goazen. esan parentesi artean testua atera nahi duzula. Harrapatzeko taldea da biderik errazena.

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

    Atzera eta aurrera begirada positiboarekin, emaitza zehatz-mehatz izango da. berdina.

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

    Kontuz gure harrapaketa-taldea dela (.*?) bi kortxeteen artean bilaketa alferra egiten du testua - lehenengo [etik lehenengora]. Galdera-ikurrik (.*) gabeko harrapaketa-talde batek bilaketa zikoitza egingo luke eta dena aterako luke lehen [etik azkenera].

    A2ko ereduarekin, formula honela doa. honako hau:

    =AblebitsRegexExtract(A5, $A$2)

    Nola lortu partida guztiak

    Esan bezala, AblebitsRegexExtract funtzioak partida bakarra atera dezake. Partidu guztiak lortzeko, lehen aipatu dugun VBA funtzioa erabil dezakezu. Hala ere, bada ohar bat - VBA RegExp-ek ez ditu taldeak harrapatzea onartzen, beraz, goiko ereduak "muga" karaktereak ere itzuliko ditu, gure kasuan parentesi.

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

    Kendu egiteko. kortxeteen artean, ORDEZTU itzazu kate hutsekin ("") formula hau erabiliz:

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

    Irakurgarritasun hobea izateko, mugatzailerako koma erabiltzen ari gara.

    Regex bi kateen artean testua ateratzeko

    Landu dugun ikuspegiainterpretatu literalki).

  • (?:[A-Za-z\d\-\.]{2,255}\.)? - harrapatzen ez den taldea hirugarren mailako, laugarren mailako, etab. domeinuak identifikatzeko, halakorik badago ( mugikorra gure adibideko URLan). Lehenengo ereduan, harrapatzeko talde handiago baten barruan kokatzen da horrelako azpidomeinu guztiak erauzketan sartzeko. Azpidomeinu batek 2 eta 255 karaktere izan ditzake, hortaz {2.255} zenbatzailea.
  • ([A-Za-z\d\-]{1,63}\.[A-Za-z] {2,24}) - harrapaketa taldea bigarren mailako domeinua ( ablebits ) eta goi mailako domeinua ( com ) ateratzeko. Bigarren mailako domeinu baten gehienezko luzera 63 karakterekoa da. Gaur egun dagoen goi-mailako domeinurik luzeenak 24 karaktere ditu.
  • A2-n zein adierazpen erregular sartzen den arabera, beheko formulak emaitza desberdinak emango ditu:

    =AblebitsRegexExtract(A5, $A$2)

    Regex domeinu-izen osoa azpidomeinu guztiekin ateratzeko:

    Regex azpidomeinurik gabeko bigarren mailako domeinua ateratzeko:

    Horrela ateratzen dira Excel-en testu zatiak adierazpen erregularrak erabiliz. Eskerrik asko irakurtzeagatik eta hurrengo astean gure blogean ikustea espero dut!

    Deskargak erabilgarri

    Excel Regex Extract adibideak (.xlsm fitxategia)

    Ultimate Suite probako bertsioa (.exe fitxategia)

    \b(0?[0-9]matchs.Count - 1 text_matches(matches_index, 0) = matchs.Item (matches_index) Hurrengo matchs_index RegExpExtract = text_matches Else RegExpExptract = matchs.Item (instance_num - 1) End If End If Irten Funtzioa ErrHandl: RegExpExpExtract = CVErrValxl

    VBArekin esperientzia gutxi baduzu, urratsez urrats erabiltzailearen gida lagungarria izan daiteke: nola txertatu VBA kodea Excel-en.

    Oharra. Funtzioak funtziona dezan, ziurtatu zure fitxategia makro gaitutako lan-liburua (.xlsm) gisa gorde duzula.

    RegExpExtract sintaxia

    RegExpExptract funtzioak adierazpen erregular batekin bat datozen balioak bilatzen ditu sarrerako kate batean eta bat-etortze bat edo guztiak ateratzen ditu.

    Funtzioak honako sintaxia du. :

    RegExpExtract(testua, eredua, [instantzia_zenbakia], [match_case])

    Non:

    • Testua (beharrezkoa) - bilatu beharreko testu-katea.
    • Eredua (beharrezkoa) - bat datorren adierazpen erregularra. Formula batean zuzenean ematen denean, eredua komatxo bikoitz artean sartu behar da.
    • Instance_num (aukerakoa) - zein instantzia atera behar den adierazten duen serie-zenbakia. Baztertu ezkero, aurkitutako bat-etortze guztiak (lehenetsia) itzultzen ditu.
    • Match_case (aukerakoa) - testu-maiuskulak eta minuskulak bat etortzea edo baztertu behar den zehazten du. EGIA edo baztertzen bada (lehenetsia), maiuskulak eta minuskulak bereizten dira; FALSE bada - maiuskulak eta minuskulak bereizten dira.

    Funtzioak Excel 365, Excel 2021, Excel bertsio guztietan funtzionatzen du.2019, Excel 2016, Excel 2013 eta Excel 2010.

    RegExpExtract-i buruz jakin behar dituzun 4 gauza

    Zure Excel-en funtzioa eraginkortasunez erabiltzeko, kontuan hartu beharreko gauza garrantzitsu batzuk daude:

    1. Lehenespenez, funtzioak aurkitutako bat-etortze guztiak itzultzen ditu ondoko gelaxketan adibide honetan erakusten den bezala. Agerraldi zehatz bat lortzeko, eman dagokion zenbakia instantzia_zenbakia argumentuari.
    2. Lehenespenez, funtzioak maiuskulak eta minuskulak bereizten ditu . Maiuskulak eta minuskulak bereizten ez badira, ezarri match_case argumentua FALSE gisa. VBA-ren mugak direla eta, maiuskulak eta minuskulak bereizten ez dituen eraikuntzak (?i) ez du funtzionatuko.
    3. eredu baliozkorik aurkitzen ez bada , funtzioak ez du ezer itzultzen (kate hutsa).
    4. eredua baliogabea bada , #BALIOA! errorea gertatzen da.

    Zure lan-orrietan funtzio pertsonalizatu hau erabiltzen hasi aurretik, zertarako gai den ulertu behar duzu, ezta? Beheko adibideek ohiko erabilera-kasu batzuk estaltzen dituzte eta portaera zergatik desberdina izan daitekeen Dynamic Array Excel-en (Microsoft 365 eta Excel 2021) eta Excel tradizionala (2019 eta bertsio zaharragoak)

    Oharra. Kanpoko regex adibideak idazten dira datu-multzo sinpleetarako. Ezin dugu ziurtatu zure benetako lan-orrietan ezin hobeto funtzionatuko dutenik. Regex-ekin esperientzia dutenek bat egingo lukete adierazpen erregularrak idaztea perfekziorako bide amaigabea dela; ia beti dago egiteko modu bat.dotoreagoa edo sarrerako datu sorta zabalagoa kudeatzeko gai da.

    Regex zenbakia katetik ateratzeko

    «Sinpletik konplexura» irakasteko oinarrizko maximari jarraituz, oso kasu arrunt batekin hasiko gara: zenbakia katetik ateratzea.

    The Zuk erabakiko duzun lehen gauza da zein zenbaki berreskuratu: lehena, azkena, agerraldi zehatza edo zenbaki guztiak.

    Atera ezazu lehen zenbakia

    Hau erregulazio erregularra bezain erraza da. \d 0tik 9rako edozein zifra esan nahi duela eta + aldiz bat edo gehiago esan nahi duela, gure adierazpen erregularrak forma hau hartzen du:

    Eredua : \d+

    Ezarri instance_num 1etik eta nahi duzun emaitza lortuko duzu:

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

    Non A5 jatorrizko katea den.

    Erosotasunerako, sar dezakezu eredua aurrez zehaztutako gelaxka batean ($A$2 ) eta blokeatu bere helbidea $ zeinuarekin:

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

    Lortu azken zenbakia

    Kate bateko azken zenbakia ateratzeko , hona hemen erabili beharreko eredua:

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

    Giza hizkuntza batera itzulita , zera dio: bilatu beste zenbaki batek jarraitzen ez duen (inon, ez berehala) zenbaki bat. Hori adierazteko, begirada negatiboa erabiltzen ari gara (?!.*\d), hau da, ereduaren eskuinaldean ez luke beste zifrarik egon behar (\d) aurretik beste zenbat karaktere dauden kontuan hartu gabe.

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

    Aholkuak:

    • gertaera zehatz bat lortzeko, erabili \d+ eredua rako eta serie egokia. instantzia_zenbakia ren zenbakia.
    • zenbaki guztiak ateratzeko formula hurrengo adibidean aztertzen da.

    Erregex bat-etortze guztiak ateratzeko

    Gure adibidea apur bat gehiago bultzatuz, demagun kate batetik zenbaki guztiak lortu nahi dituzula, ez bakarra.

    Gogoan duzunez, ateratako bat-etortze kopurua <1 aukerakoarekin kontrolatzen da>instantzia_zenbakia argumentua. Lehenetsia bat-etortze guztiak dira, beraz, parametro hau baztertu besterik ez duzu:

    =RegExpExtract(A2, "\d+")

    Formulak ederki funtzionatzen du gelaxka bakarrerako, baina portaera desberdina da Dynamic Array Excel-en eta bertsio ez-dinamikoetan.

    Excel 365 eta Excel 2021

    Matrize dinamikoak onartzen direlako, ohiko formula bat automatikoki isurtzen da behar adina gelaxkatan kalkulatutako emaitza guztiak bistaratzeko. Excel-i dagokionez, isuritako barrutia deitzen zaio:

    Excel 2019 eta txikiagoa

    Excel aurredinamikoan, goiko formulak partida bakarra itzuliko luke. Bat-etortze bat baino gehiago lortzeko, matrize formula bat egin behar duzu. Horretarako, hautatu gelaxka sorta bat, idatzi formula eta sakatu Ctrl + Maius + Sartu hura osatzeko.

    Ikuspegi honen alde txarra da "gelaxka gehigarrietan" agertzen diren #N/A errore ugari. . Tamalez, ezin da ezer egin horri buruz (ez IFERROR ez IFNA ezin dute konpondu, ai).

    Atera gelaxka batean bat-etortze guztiak

    Datu zutabe bat prozesatzen duzunean, goiko ikuspegiak ez du funtzionatuko. Kasu honetan, irtenbide aproposapartida guztiak gelaxka bakarrean itzuliko lituzke. Hori egiteko, zerbitzatu RegExpExtract-en emaitzak TEXTJOIN funtzioari eta bereizi nahi dituzun mugatzaile batekin, esan koma eta zuriune batekin:

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

    Oharra. TEXTJOIN funtzioa Microsoft 365, Excel 2021 eta Excel 2019rako Excel-en soilik eskuragarri dagoenez, formulak ez du funtzionatuko bertsio zaharretan.

    Katetik testua ateratzeko erregulartasuna

    Testua ateratzen. kate alfanumeriko bat nahiko erronka da Excel-en. Regex-ekin, tarta bezain erraza bihurtzen da. Erabili ezeztatutako klase bat zifra bat ez den guztiarekin bat etortzeko.

    Eredua : [^\d]+

    Gelhala indibidualetan azpikateak lortzeko (isuri barrutia) , formula hau da:

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

    Partekatze guztiak gelaxka batean ateratzeko, habiatu RegExpExtract funtzioa TEXTJOIN-en honela:

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

    Regex atera helbide elektronikoa katetik

    Informazio ezberdin asko duen kate batetik helbide elektroniko bat ateratzeko, idatzi helbide elektronikoaren egitura errepikatzen duen adierazpen erregular bat.

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

    Erregulazio hau apurtzen , hona hemen lortzen duguna:

    • [\w\.\-]+ karaktere alfanumeriko bat edo gehiago izan ditzakeen erabiltzaile-izen bat da, azpimarra, puntu eta marratxoak.
    • @ ikurra
    • [A-Za-z0-9\.\-]+ honako hauek osatutako domeinu-izena da: letra larriak eta minuskulak, zifrak, marratxoak eta puntuak (badaezinazpidomeinuak). Hemen ez da azpimarrarik onartzen, beraz, 3 karaktere-multzo desberdin erabiltzen dira (adibidez, A-Z a-z eta 0-9) edozein hizki, digitu edo azpimarraz bat datorren \w-ren ordez.
    • \.[A-Za-z ]{2,24} goi-mailako domeinua da. Letra larriak eta minuskulak eta ondoren puntu batez osatuta dago. Goi-mailako domeinu gehienek 3 letrako luzera dute (adibidez, .com .org, .edu, etab.), baina teorian 2 eta 24 letra artekoak izan ditzake (erregistratutako TLD luzeena).

    Katea A5-en eta eredua A2-n dagoela suposatuz, helbide elektroniko bat ateratzeko formula hau da:

    =RegExpExtract(A5, $A$2)

    Erregex domeinua posta elektronikotik ateratzeko

    Noiz posta elektronikoko domeinua ateratzera dator, burura etortzen zaidan lehenengo pentsamendua @ karaktereari berehala jarraitzen dion testua bilatzeko talde bat erabiltzea da.

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

    Zerbi ezazu gure RegExp funtzioari:

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

    Eta emaitza hau lortuko duzu:

    Adierazpen erregular klasikoekin, harrapatzeko taldetik kanpoko ezer ez da erauzketan sartzen. Inork ez daki zergatik VBA RegEx funtzionatzen duen modu ezberdinean eta "@" harrapatzen du. Hori kentzeko, emaitzatik lehenengo karakterea kendu dezakezu kate huts batekin ordezkatuz.

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

    Telefono-zenbakiak ateratzeko adierazpen erregularra

    Telefono-zenbakiak hainbat modutan idatzi daiteke, eta horregatik ia ezinezkoa da guztion azpian funtzionatzen duen irtenbide bat aurkitzea(\d{4}from string

    Data ateratzeko adierazpen erregular bat data kate baten barruan agertzen den formatuaren araberakoa da. Adibidez:

    2021/01/01 edo 2021/01/01 bezalako datak ateratzeko, hau da erreexusa: \d{1,2}\/\d{1,2}\/(\d {4}inguruabarrak. Hala ere, zure datu-multzoan erabilitako formatu guztiak idatz ditzakezu eta haiek bat egiten saia zaitezke.

    Adibide honetarako, formatu hauetako edozein telefono-zenbakiak aterako dituen regex bat sortuko dugu:

    (123) 345-6789

    (123) 345 6789

    (123)3456789

    123- 345-6789

    123.345.6789

    123 345 6789

    1233456789

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

    • Lehenengo zatia \(?\d{3} bat dator zero edo hasierako parentesi batekin eta ondoren hiru zifraz d{3}.
    • [-\. \)]* zatiak 0 aldiz edo gehiagotan agertzen den kortxete artean dagoen edozein karaktere esan nahi du: marratxoa, puntua, zuriunea edo itxiera parentesia.
    • Ondoren, hiru zifra ditugu berriro d{3} eta jarraian. edozein marratxo, puntu edo zuriune [-\. ]? 0 edo 1 aldiz agertzen da.
    • Ondoren, lau zifrako talde bat dago \d{4}.
    • Azkenik, hitz-muga bat dago \b garen telefono-zenbakia definitzen duena. bilatzea ezin da zenbaki handiago baten parte izan.

    Formula osoak forma hau hartzen du:

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

    Kontuan izan goiko adierazpen erregularrak batzuk itzul ditzakeela. emaitza faltsu-positiboak, esate baterako, 123) 456 7899 edo (123 456 7899). Beheko bertsioak arazo hauek konpontzen ditu. Hala ere, sintaxi honek VBA RegExp funtzioetan bakarrik funtzionatzen du, ez adierazpen erregular klasikoetan.

    Eredua : (\(\d{3}\)bi karaktere arteko testua ateratzeko bi kate arteko testua ateratzeko ere balioko du.

    Adibidez, "test 1" eta "test 2" arteko guztia lortzeko, erabili honako adierazpen erregular hau.

    Eredua : proba 1(.*?)proba 2

    Formula osoa hau da:

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

    Domeinua URLtik ateratzeko erregulazioa.

    Adierazpen erregularekin ere, domeinu-izenak URLetatik ateratzea ez da lan hutsala. Trikimailua egiten duen funtsezko elementua harrapatzen ez diren taldeak dira. Zure azken helburuaren arabera, aukeratu beheko exekuzio erregular hauetako bat.

    domeinu-izen osoa azpidomeinuak barne

    Eredua lortzeko domeinu-izen osoa lortzeko: (?: https?\:

    Michael Brown teknologia-zale dedikatua da, software-tresnak erabiliz prozesu konplexuak sinplifikatzeko grina duena. Hamarkada bat baino gehiagoko esperientzia duen teknologia-industrian, Microsoft Excel eta Outlook-en eta Google Sheets eta Docs-en trebetasunak landu ditu. Michael-en bloga bere ezagutzak eta esperientziak besteekin partekatzera zuzenduta dago, produktibitatea eta eraginkortasuna hobetzeko aholku eta tutorial errazak eskaintzen ditu. Profesional ondua edo hasiberria izan, Michael-en blogak informazio baliotsuak eta aholku praktikoak eskaintzen ditu funtsezko software-tresna horiei etekinik handiena ateratzeko.