Regex por ĉerpi ŝnurojn en Excel (unu aŭ ĉiuj kongruoj)

  • Kundividu Ĉi Tion
Michael Brown

En ĉi tiu lernilo, vi lernos kiel uzi regulajn esprimojn en Excel por trovi kaj ĉerpi subŝnurojn kongruajn kun difinita ŝablono.

Microsoft Excel provizas kelkajn funkciojn por ĉerpi tekston. el ĉeloj. Tiuj funkcioj povas trakti plej multajn eltirajn defiojn en viaj laborfolioj. Plej multaj, sed ne ĉiuj. Kiam la Tekstaj funkcioj stumblas, regulaj esprimoj venas por savi. Atendu... Excel ne havas RegEx-funkciojn! Vere, neniuj enkonstruitaj funkcioj. Sed estas nenio, kio malhelpus vin uzi viajn proprajn :)

    Excel VBA Regex-funkcio por ĉerpi ĉenojn

    Por aldoni kutiman Regex Extract-funkcion al via Excel, algluu la sekvan kodon en la VBA-redaktilo. Por ebligi regulajn esprimojn en VBA, ni uzas la enkonstruitan Mikrosoftan RegExp-objekton.

    Publika Funkcio RegExpExtract (teksto As String , pattern As String , Optional instance_num As Integer = 0, Optional match_case As Bulea = True ) Dim text_matches() As String Dim matchs_index As Integer On Error GoTo ErrHandl RegExpExtract = "" Set regex = KreiObjekton ( " VBScript.RegExp " ) regex.pattern = ŝablono regex.Global = Vera regex.MultiLine = True If True = kongruo_case Tiam regex. ignorecase = Falsa Alie regex.ignorecase = Vera Fino If Set matchs = regex.Execute (teksto) If 0 < matchs.Count Then If (0 = instance_num) Then ReDim text_matches (matches.Count - 1, 0) For matchs_index = 0 ToVBA RegExp, mi instigas vin legi la sekvan parton kiu diskutas multe pli potencajn .NET Regex-funkciojn.

    Persona .NET-bazita RegExp-funkcio por ĉerpi tekston en Excel

    Malkiel VBA RegExp-funkcioj kiuj povas esti skribita de iu ajn Excel-uzanto, .NET RegEx estas la regno de la programisto. La Microsoft .NET Framework subtenas plenefikan regulan esprimon sintakson kongruan kun Perl 5. Ĉi tiu artikolo ne instruos vin kiel skribi tiajn funkciojn (mi ne estas programisto kaj ne havas plej etan ideon pri kiel fari tion :)

    Kvar potencaj funkcioj prilaboritaj de la norma .NET RegEx-motoro jam estas skribitaj de niaj programistoj kaj inkluzivitaj en Ultimate Suite. Malsupre, ni montros kelkajn praktikajn uzojn de la funkcio speciale desegnita por ĉerpi tekston en Excel.

    Konsileto. Por informoj pri la .NET Regex-sintakso, bonvolu raporti al .NET Regula Esprima Lingvo.

    Kiel ĉerpi pikilojn en Excel per regulaj esprimoj

    Supozinte ke vi havas la plej novan version de Ultimate Suite instalita, ĉerpi tekston per regulaj esprimoj resumas al ĉi tiuj du paŝoj:

    1. Sur la langeto Ablebits Data , en la grupo Teksto , alklaku Regex-Iloj .
    2. En la panelo Regex-Iloj , elektu la fontajn datumojn, enigu vian Regex-ŝablonon kaj elektu la opcion Eltiri . Por ricevi la rezulton kiel kutiman funkcion, ne valoron, elektu la ĉekon Enmeti kiel formulon skatolo. Fininte, alklaku la butonon Eltiri .

    La rezultoj aperos en nova kolumno dekstre de viaj originaj datumoj:

    AblebitsRegexExtract-sintakso

    Nia kutima funkcio havas la jenan sintakson:

    AblebitsRegexExtract(referenco, regula_esprimo)

    Kie:

    • Referenco (postulata) - referenco al la ĉelo enhavanta la fontĉenon.
    • Regula_esprimo (postulata) - la regex ŝablono kongrua.

    Grava noto! La funkcio funkcias nur ĉe la maŝinoj kun instalita Ultimate Suite por Excel.

    Notoj pri uzado

    Por fari vian lernkurbon pli glata kaj via sperto pli agrabla, bonvolu atenti ĉi tiujn punktojn:

    1. Por krei formulon, vi povas uzi niajn Regex-Ilojn , aŭ la dialogon Enmeti funkcion de Excel, aŭ tajpi la plenan funkcionomon en ĉelo. Post kiam la formulo estas enigita, vi povas administri ĝin (redakti, kopii aŭ movi) kiel ajna denaska formulo.
    2. La ŝablono, kiun vi enigas en la panelo Regex Tools , iras al la 2-a argumento. Eblas ankaŭ konservi regulan esprimon en aparta ĉelo. En ĉi tiu kazo, nur uzu ĉelan referencon por la 2-a argumento.
    3. La funkcio ĉerpas la unuan trovitan kongruon .
    4. Defaŭlte, la funkcio estas majuskla. -sentema . Por majusksentema kongruo, uzu la (?i) ŝablonon.
    5. Se kongruo ne estas trovita, #N/A eraro estasrevenis.

    Regex por ĉerpi ĉenon inter du signoj

    Por akiri tekston inter du signoj, vi povas uzi aŭ kaptan grupon aŭ ĉirkaŭrigardi.

    Ni iru. diru, ke vi serĉas ĉerpi tekston inter krampoj. Kapta grupo estas la plej facila maniero.

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

    Kun pozitiva rigardo malantaŭen kaj antaŭen, la rezulto estos ĝuste la sama.

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

    Bonvolu atenti, ke nia kapta grupo (.*?) faras maldiligentan serĉon por teksto inter du krampoj - de la unua [ ĝis la unua ]. Kapta grupo sen demandosigno (.*) farus avidan serĉon kaj kaptus ĉion de la unua [ ĝis la lasta ].

    Kun la ŝablono en A2, la formulo iras tiel. sekvas:

    =AblebitsRegexExtract(A5, $A$2)

    Kiel akiri ĉiujn kongruojn

    Kiel jam menciite, la funkcio AblebitsRegexExtract povas ĉerpi nur unu kongruon. Por akiri ĉiujn kongruojn, vi povas uzi la VBA-funkcion, kiun ni diskutis antaŭe. Tamen, estas unu averto - VBA RegExp ne subtenas kaptado de grupoj, do la ĉi-supra ŝablono revenos ankaŭ la "limajn" signojn, krampojn en nia kazo.

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

    Por forigi de la krampoj, SUBSTITUTU ilin per malplenaj ŝnuroj ("") uzante ĉi tiun formulon:

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

    Por pli bona legebleco, ni uzas komon por limigilo.

    Regex por ĉerpi tekston inter du ĉenoj

    La aliro, kiun ni laborisinterpretu ĝin laŭvorte).

  • (?:[A-Za-z\d\-\.]{2,255}\.)? - ne-kapta grupo por identigi trinivelajn, kvar-nivelajn, ktp domajnojn, se ekzistas ( poŝtelefono en nia ekzempla URL). En la unua ŝablono, ĝi estas metita ene de pli granda kapta grupo por igi ĉiujn tiajn subdomajnojn inkluzivitaj en la eltiron. Subdomajno povas esti de 2 ĝis 255 signoj, do la {2,255} kvantigilo.
  • ([A-Za-z\d\-]{1,63}\.[A-Za-z] {2,24}) - kaptanta grupon por ĉerpi la duanivelan domajnon ( ablebits ) kaj la suprannivelan domajnon ( com ). La maksimuma longo de duanivela domajno estas 63 signoj. La plej longa supranivela domajno nuntempe ekzistanta enhavas 24 signojn.
  • Dependi de kiu regula esprimo estas enigita en A2, la suba formulo produktos malsamajn rezultojn:

    =AblebitsRegexExtract(A5, $A$2)

    Regex por ĉerpi la plenan domajnan nomon kun ĉiuj subdomajnoj:

    Regex por ĉerpi du-nivelan domajnon sen subdomajnoj:

    Jen kiel ĉerpi partojn de teksto en Excel per regulaj esprimoj. Mi dankas vin pro legado kaj antaŭĝojas vidi vin en nia blogo venontsemajne!

    Haveblaj elŝutoj

    Excel Regex Extract (ekzemploj .xlsm)

    Ultimate Suite prova versio (.exe dosiero)

    \b(0?[0-9]matchs.Count - 1 text_matches(matches_index, 0) = matchs.Item (matches_index) Sekva matchs_index RegExpExtract = text_matches Else RegExpExtract = kongruoj.Item (instance_num - 1) End If End If Exit Function ErrHandl: RegExpExtract = CVErrValuxl

    Se vi havas malmulte da sperto pri VBA, paŝo post paŝo uzantgvidilo povas montriĝi helpema: Kiel enigi VBA-kodon en Excel.

    Noto. Por ke la funkcio funkciu, nepre konservu vian dosieron kiel makro-ebligita laborlibro (.xlsm).

    RegExpExtract-sintakso

    La RegExpExtract -funkcio serĉas enigoĉenon valorojn kiuj kongruas kun regula esprimo kaj ĉerpas unu aŭ ĉiujn kongruojn.

    La funkcio havas la jenan sintakson. :

    RegExpExtract(teksto, ŝablono, [instance_num], [match_case])

    Kie:

    • Teksto (postulata) - la tekstoĉeno por serĉi.
    • Ŝablono (postulata) - la regula esprimo kongrua. Se liverita rekte en formulo, la ŝablono estu enfermita en duoblaj citiloj.
    • Instance_num (laŭvola) - seria numero kiu indikas kiun ekzemplon ĉerpi. Se ellasita, liveras ĉiujn trovitajn kongruojn (defaŭlte).
    • Match_case (laŭvola) - difinas ĉu kongrui aŭ ignori tekston. Se VERA aŭ preterlasita (defaŭlte), uskle-distinta kongruo estas farita; se FALSA - nedistingeblas.

    La funkcio funkcias en ĉiuj versioj de Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 kaj Excel 2010.

    4 aferoj, kiujn vi devus scii pri RegExpExtract

    Por efike uzi la funkcion en via Excel, estas kelkaj gravaj aferoj por atenti:

    1. Defaŭlte, la funkcio liveras ĉiujn trovitajn kongruojn en najbarajn ĉelojn kiel montrite en ĉi tiu ekzemplo. Por ricevi specifan aperon, liveru respondan nombron al la argumento instance_num .
    2. Defaŭlte, la funkcio estas majuskle-distinga . Por majusksentema kongruo, agordu la argumenton match_case al FALSE. Pro la VBA-limigoj, la majusksentema konstruo (?i) ne funkcios.
    3. Se valida ŝablono ne estas trovita , la funkcio liveras nenion (malplena ĉeno).
    4. Se la ŝablono estas nevalida , #VALORO! eraro okazas.

    Antaŭ ol vi komencas uzi ĉi tiun kutiman funkcion en viaj laborfolioj, vi devas kompreni, kion ĝi kapablas, ĉu ne? La subaj ekzemploj kovras kelkajn oftajn uzkazojn kaj klarigas kial la konduto povas malsami en Dynamic Array Excel (Microsoft 365 kaj Excel 2021) kaj tradicia Excel (2019 kaj pli malnovaj versioj).

    Notu. Ekzemploj de regex estas skribitaj por feaj simplaj datumseroj. Ni ne povas garantii, ke ili funkcios perfekte en viaj veraj laborfolioj. Tiuj, kiuj havas sperton pri regex, konsentus, ke skribi regulajn esprimojn estas senfina vojo al perfekteco - preskaŭ ĉiam ekzistas maniero fari.ĝi estas pli eleganta aŭ kapabla pritrakti pli larĝan gamon da enigdatenoj.

    Regex por ĉerpi nombron el ĉeno

    Sekvante la bazan maksimumon de instruado "de simpla al kompleksa", ni komencos per tre simpla kazo: ĉerpi nombron el ĉeno.

    La unua afero por vi decidas estas kiun numeron repreni: unua, lasta, specifa okazo aŭ ĉiuj nombroj.

    Eltiri unuan numeron

    Ĉi tio estas tiel simpla kiel regex povas akiri. Konsiderante ke \d signifas ajnan ciferon de 0 ĝis 9, kaj + signifas unu aŭ plurajn fojojn, nia regula esprimo prenas ĉi tiun formon:

    Skemo : \d+

    Aro instance_num al 1 kaj vi ricevos la deziratan rezulton:

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

    Kie A5 estas la origina ĉeno.

    Por oportuno, vi povas enigi la ŝablono en antaŭdifinita ĉelo ($A$2 ) kaj ŝlosu ĝian adreson per la $-signo:

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

    Akiru lastan numeron

    Por ĉerpi la lastan numeron en ĉeno , jen la ŝablono por uzi:

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

    Tradukita en homan lingvon , ĝi diras: trovu nombron, kiu ne estas sekvata (ie, ne nur tuj) de iu alia nombro. Por esprimi tion, ni uzas negativan antaŭrigardon (?!.*\d), kio signifas, ke dekstre de la ŝablono ne estu alia cifero (\d) sendepende de kiom da aliaj signoj estas antaŭ ĝi.

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

    Konsiloj:

    • Por akiri specifan okazon , uzu \d+ por ŝablono kaj taŭgan seriannombro por instanco_num .
    • La formulo por ĉerpi ĉiujn nombrojn estas diskutita en la sekva ekzemplo.

    Regex por ĉerpi ĉiujn kongruojn

    Paŭante nian ekzemplon iom pli, supozu, ke vi volas ricevi ĉiujn nombrojn el ĉeno, ne nur unu.

    Kiel vi memoras, la nombro da ĉerpitaj kongruoj estas regata de la laŭvola instanco_num argumento. La defaŭlta estas ĉiuj kongruoj, do vi simple preterlasas ĉi tiun parametron:

    =RegExpExtract(A2, "\d+")

    La formulo funkcias bele por ununura ĉelo, sed la konduto diferencas en Dynamic Array Excel kaj ne-dinamikaj versioj.

    Excel 365 kaj Excel 2021

    Pro subteno por dinamikaj tabeloj, regula formulo aŭtomate disverŝas en tiom da ĉeloj kiom necesas por montri ĉiujn kalkulitajn rezultojn. Koncerne Excel, ĉi tio nomiĝas disverŝita gamo:

    Excel 2019 kaj pli malalta

    En antaŭdinamika Excel, la supra formulo redonus nur unu matĉon. Por akiri plurajn kongruojn, vi devas fari ĝin tabelformulo. Por ĉi tio, elektu gamon da ĉeloj, tajpu la formulon, kaj premu Ctrl + Maj + Enigu por kompletigi ĝin.

    Malavantaĝo de ĉi tiu aliro estas amaso da #N/A-eraroj aperantaj en "kromaj ĉeloj" . Bedaŭrinde, nenio fareblas pri ĝi (nek IFERROR nek IFNA povas ripari ĝin, ve).

    Eltiru ĉiujn kongruojn en unu ĉelo

    Dum prilaborado de kolumno da datumoj, la ĉi-supra aliro evidente ne funkcios. En ĉi tiu kazo, ideala solvoestus resendante ĉiujn matĉojn en ununura ĉelo. Por fari ĝin, servu la rezultojn de RegExpExtract al la funkcio TEXTJOIN kaj apartigu ilin per iu ajn limigilo, kiun vi ŝatas, diru komo kaj spaco:

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

    Noto. Ĉar la funkcio TEXTJOIN disponeblas nur en Excel por Microsoft 365, Excel 2021 kaj Excel 2019, la formulo ne funkcios en pli malnovaj versioj.

    Regex por ĉerpi tekston el ĉeno

    Eltiri tekston el alfanombra ĉeno estas sufiĉe malfacila tasko en Excel. Kun regex, ĝi fariĝas tiel facila kiel kukaĵo. Nur uzu neigitan klason por kongrui ĉion, kio ne estas cifero.

    Skemo : [^\d]+

    Por ricevi subŝnurojn en unuopaj ĉeloj (disverŝa intervalo) , la formulo estas:

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

    Por eligi ĉiujn kongruojn en unu ĉelon, nestu la funkcion RegExpExtract en TEXTJOIN tiel:

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

    Regex al eltiri retpoŝtadreson el ĉeno

    Por eltiri retpoŝtadreson el ĉeno enhavanta multajn malsamajn informojn, skribu regulan esprimon, kiu reproduktas la retpoŝtadresstrukturon.

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

    Malkonstrui ĉi tiun regex , jen kion ni ricevas:

    • [\w\.\-]+ estas uzantnomo kiu povas inkluzivi 1 aŭ pli da alfanombraj signoj, substrekoj, punktoj kaj streketoj.
    • @ simbolo
    • [A-Za-z0-9\.\-]+ estas domajna nomo konsistanta el: majusklaj kaj minuskloj, ciferoj, streketoj kaj punktoj (kazede subdomajnoj). Substrekoj ĉi tie ne estas permesitaj, tial 3 malsamaj signoroj (kiel A-Z a-z kaj 0-9) estas uzataj anstataŭ \w kiu kongruas kun ajna litero, cifero aŭ substreko.
    • \.[A-Za-z ]{2,24} estas supranivela domajno. Konsistas el punkto sekvata de majusklaj kaj minuskloj. La plej multaj el altnivelaj domajnoj longas 3 literojn (ekz. .com .org, .edu, ktp.), sed teorie ĝi povas enhavi de 2 ĝis 24 literoj (la plej longa registrita TLD).

    Supoze, ke la ĉeno estas en A5 kaj la ŝablono en A2, la formulo por ĉerpi retpoŝtadreson estas:

    =RegExpExtract(A5, $A$2)

    Regex por ĉerpi domajnon de retpoŝto

    Kiam ĝi venas por ĉerpi retpoŝtan domajnon, la unua penso, kiu venas al la menso, estas uzi kaptan grupon por trovi tekston, kiu tuj sekvas la signon @.

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

    Servu ĝin al nia RegExp-funkcio:

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

    Kaj vi ricevos ĉi tiun rezulton:

    Kun klasikaj regulaj esprimoj, io ajn ekster kapta grupo ne estas inkluzivita en la eltiro. Neniu scias kial VBA RegEx funkcias malsame kaj kaptas "@" ankaŭ. Por forigi ĝin, vi povas forigi la unuan signon de la rezulto anstataŭigante ĝin per malplena ĉeno.

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

    Regula esprimo por ĉerpi telefonnumerojn

    Telefonnumeroj povas esti skribita en multaj malsamaj manieroj, tial estas preskaŭ neeble elpensi solvon funkciantan sub ĉiuj(\d{4}from string

    Regula esprimo por ĉerpi dato dependas de la formato en kiu la dato aperas ene de ĉeno. Ekzemple:

    Por ĉerpi datojn kiel 1/1/21 aŭ 01/01/2021, la regex estas: \d{1,2}\/\d{1,2}\/(\d {4}cirkonstancoj. Tamen, vi povas noti ĉiujn formatojn uzatajn en via datumaro kaj provi kongrui kun ili.

    Por ĉi tiu ekzemplo, ni kreos regex, kiu ĉerpos telefonnumerojn en iu ajn el ĉi tiuj formatoj:

    (123) 345-6789

    (123) 345 6789

    (123)3456789

    123- 345-6789

    123.345.6789

    123 345 6789

    1233456789

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

    • La unua parto \(?\d{3} kongruas kun nulo aŭ unu malferma krampo sekvata de tri ciferoj d{3}.
    • La parto [-\. \)]* signifas iun ajn signon en kvadrataj krampoj aperantaj 0 aŭ pli da fojoj: streketo, punkto, spaco aŭ ferma krampo.
    • Sekva, ni denove havas tri ciferojn d{3} sekvata de ajna streketo, punkto aŭ spaco [-\. ]? aperante 0 aŭ 1 fojon.
    • Post tio, estas grupo de kvar ciferoj \d{4}.
    • Fine, estas vortlimo \b difinanta ke telefonnumero ni estas serĉado ne povas esti parto de pli granda nombro.

    La kompleta formulo prenas ĉi tiun formon:

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

    Bonvolu konscii, ke la supra regex povas redoni kelkajn malveraj pozitivaj rezultoj kiel 123) 456 7899 aŭ (123 456 7899. La malsupra versio korektas ĉi tiujn problemojn. Tamen ĉi tiu sintakso nur funkcias en VBA RegExp-funkcioj, ne en klasikaj regulaj esprimoj.

    Ŝablono. : (\(\d{3}\)eltiri tekston inter du signoj ankaŭ funkcios por eltiri tekston inter du ĉenoj.

    Ekzemple, por akiri ĉion inter "testo 1" kaj "testo 2", uzu la sekvan regulan esprimon.

    Ŝablono : testo 1(.*?)testo 2

    La kompleta formulo estas:

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

    Regex por ĉerpi domajnon de URL

    Eĉ kun regulaj esprimoj, ĉerpi domajnajn nomojn el URL-oj ne estas bagatela tasko. La ŝlosila elemento, kiu faras la lertaĵon, estas ne-kaptaj grupoj. Depende de via finfina celo, elektu unu el la subaj regeksoj.

    Por akiri plenan domajnan nomon inkluzive de subdomajnoj

    Ŝablono : (?: https?\:

    Michael Brown estas diligenta teknologia entuziasmulo kun pasio por simpligi kompleksajn procezojn uzante programarajn ilojn. Kun pli ol jardeko da sperto en la teknologia industrio, li perfektigis siajn kapablojn en Microsoft Excel kaj Outlook, same kiel Google Sheets kaj Docs. La blogo de Mikaelo estas dediĉita al kunhavigi siajn sciojn kaj kompetentecon kun aliaj, provizante facilajn sekvajn konsiletojn kaj lernilojn por plibonigi produktivecon kaj efikecon. Ĉu vi estas sperta profesiulo aŭ komencanto, la blogo de Mikaelo ofertas valorajn komprenojn kaj praktikajn konsilojn por eltiri la plej multajn el ĉi tiuj esencaj programaj iloj.