Enhavtabelo
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:
- Sur la langeto Ablebits Data , en la grupo Teksto , alklaku Regex-Iloj .
- 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:
- 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.
- 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.
- La funkcio ĉerpas la unuan trovitan kongruon .
- Defaŭlte, la funkcio estas majuskla. -sentema . Por majusksentema kongruo, uzu la (?i) ŝablonon.
- 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).
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 = CVErrValuxlSe 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:
- 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 .
- 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.
- Se valida ŝablono ne estas trovita , la funkcio liveras nenion (malplena ĉeno).
- 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?\: