Efnisyfirlit
Í þessari kennslu muntu læra hvernig á að nota regluleg segð í Excel til að finna og draga út undirstrengi sem passa við ákveðið mynstur.
Microsoft Excel býður upp á fjölda aðgerða til að draga út texta úr frumum. Þessar aðgerðir geta tekist á við flestar strengjaútdráttaráskoranir í vinnublöðunum þínum. Flestir, en ekki allir. Þegar textaaðgerðirnar hrasa, koma reglulegar tjáningar til bjargar. Bíddu... Excel hefur engar RegEx aðgerðir! Satt, engar innbyggðar aðgerðir. En það er ekkert sem myndi koma í veg fyrir að þú notir þínar eigin :)
Excel VBA Regex aðgerð til að draga út strengi
Til að bæta sérsniðinni Regex Extract aðgerð við Excel, límdu eftirfarandi kóða í VBA ritlinum. Til þess að virkja reglulegar tjáningar í VBA, erum við að nota innbyggða Microsoft RegExp hlutinn.
Public Function RegExpExtract(texti sem strengur , mynstur sem strengur , valfrjálst dæmi_tal sem heiltala = 0, valfrjálst match_case As Boolean = True ) Dimm text_matches() As String Dim matches_index As Heiltala On Error GoTo ErrHandl RegExpExtract = "" Stilltu regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = pattern regex.Global = True regex.MultiLine = True If True = match_case Síðan regex. ignorecase = False Annað regex.ignorecase = True End If Set passar = regex.Execute(text) If 0 < matches.Count Then If (0 = instance_num) Then ReDim text_matches(matches.Count - 1, 0) For matches_index = 0 ToVBA RegExp, ég hvet þig til að lesa næsta hluta sem fjallar um miklu öflugri .NET Regex aðgerðir.Sérsniðin .NET byggð Regex aðgerð til að draga út texta í Excel
Ólíkt VBA RegExp aðgerðum sem Hægt er að skrifa hvaða Excel notanda sem er, .NET RegEx er ríki þróunaraðilans. Microsoft .NET Framework styður fullkomna setningafræði reglulega tjáningar sem er samhæf við Perl 5. Þessi grein mun ekki kenna þér hvernig á að skrifa slíkar aðgerðir (ég er ekki forritari og hef ekki minnstu hugmynd um hvernig á að gera það :)
Fjórar öflugar aðgerðir sem unnar eru af stöðluðu .NET RegEx vélinni eru þegar skrifaðar af hönnuðum okkar og innifaldar í Ultimate Suite. Hér að neðan munum við sýna fram á nokkur hagnýt notkun aðgerðarinnar sem er sérstaklega hönnuð til að draga út texta í Excel.
Ábending. Fyrir upplýsingar um .NET Regex setningafræði, vinsamlegast skoðaðu .NET Regular Expression Language.
Hvernig á að draga út sting í Excel með því að nota reglulegar tjáningar
Að því gefnu að þú sért með nýjustu útgáfuna af Ultimate Suite uppsetta, þá snýst útdráttur texta með reglulegum segðum niður í þessi tvö skref:
- Á flipanum Ablebits Data , í Texti hópnum, smelltu á Regex Tools .
- Á Regex Tools glugganum skaltu velja upprunagögnin, slá inn Regex mynstur og velja Extract valkostinn. Til að fá niðurstöðuna sem sérsniðna aðgerð, ekki gildi, veldu Setja inn sem formúlu hakiðkassa. Þegar því er lokið skaltu smella á hnappinn Extract .
Niðurstöðurnar munu birtast í nýjum dálki hægra megin við upprunalegu gögnin þín:
AblebitsRegexExtract setningafræði
Sérsniðin aðgerð okkar hefur eftirfarandi setningafræði:
AblebitsRegexExtract(reference, regular_expression)Hvar:
- Reference (krafist) - tilvísun í reitinn sem inniheldur upprunastrenginn.
- Regluleg_tjáning (áskilið) - regex mynstur sem samsvarar.
Mikilvægt athugið! Aðgerðin virkar aðeins á vélum þar sem Ultimate Suite for Excel er uppsett.
Notunarskýrslur
Til að gera námsferilinn sléttari og upplifun þína skemmtilegri, vinsamlegast gaum að þessum atriðum:
- Til að búa til formúlu geturðu notað Regex Tools okkar, eða Insert function valmynd Excel, eða slegið inn fullt heiti fallsins í reit. Þegar formúlan hefur verið sett inn geturðu stjórnað henni (breyta, afrita eða færa) eins og hvaða innfædda formúlu sem er.
- Mynstrið sem þú slærð inn á Regex Tools glugganum fer í 2. Það er líka hægt að halda reglulegri tjáningu í sérstakri reit. Í þessu tilviki, notaðu bara frumutilvísun fyrir 2. rifrildi.
- Funkið dregur út fyrst fundna samsvörun .
- Sjálfgefið er að fallið er hástafir -viðkvæm . Notaðu (?i) mynstrið fyrir samsvörun sem er ónæm fyrir hástöfum.
- Ef samsvörun finnst ekki er #N/A villaskilað.
Regex til að draga út streng á milli tveggja stafa
Til að fá texta á milli tveggja stafa geturðu notað annað hvort tökuhóp eða útlit.
Við skulum segðu að þú sért að leita að texta á milli sviga. Auðveldasta leiðin er að fanga hóp.
Mynstur 1 : \[(.*?)\]
Með jákvæðu yfirliti á bak og fram í tímann verður útkoman nákvæmlega það sama.
Mynstur 2 : (?<=\[)(.*?)(?=\])
Vinsamlegast athugaðu að fanghópurinn okkar (.*?) gerir letileit að texta á milli tveggja sviga - frá fyrsta [ til fyrsta ]. Handtökuhópur án spurningamerkis (.*) myndi gera gráðuga leit og fanga allt frá fyrsta [ til síðasta ].
Með mynstrinu í A2 fer formúlan eins og eftirfarandi:
=AblebitsRegexExtract(A5, $A$2)
Hvernig á að fá allar samsvörun
Eins og áður hefur komið fram getur AblebitsRegexExtract aðgerðin aðeins dregið út eina samsvörun. Til að fá allar samsvörun geturðu notað VBA aðgerðina sem við höfum fjallað um áðan. Hins vegar er einn fyrirvari - VBA RegExp styður ekki handtaka hópa, þannig að ofangreint mynstur mun skila "mörka" stöfunum líka, sviga í okkar tilviki.
=TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))
Til að losna við af sviga, STAÐA þeim í staðinn fyrir tóma strengi ("") með því að nota þessa formúlu:
=SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")
Til að lesa betur notum við kommu fyrir afmörkun.
Regex til að draga út texta á milli tveggja strengja
Nálgunin sem við höfum unniðtúlka það bókstaflega).
Það fer eftir því hvaða reglulegu segð er slegið inn í A2, formúlan hér að neðan gefur mismunandi niðurstöður:
=AblebitsRegexExtract(A5, $A$2)
Regex til að draga út fullt lén með öllum undirlénum:
Regex til að draga út annað stigs lén án undirléna:
Svona á að draga út hluta af texta í Excel með því að nota reglulegar segðir. Ég þakka þér fyrir lesturinn og hlakka til að sjá þig á blogginu okkar í næstu viku!
Lagt niðurhal
Excel Regex Extract dæmi (.xlsm skrá)
Ultimate Suite prufuútgáfa (.exe skrá)
\b(0?[0-9]matches.Count - 1 text_matches(matches_index, 0) = matches.Item(matches_index) Next matches_index RegExpExtract = text_matches Else RegExpExtract = matches.Item(instance_num - 1) End If End If Exit Function ErrHandl: RegExpExtract = CVErction(xlEr End FunrctionExtract)Ef þú hefur litla reynslu af VBA gæti skref-fyrir-skref notendahandbók reynst gagnleg: Hvernig á að setja inn VBA kóða í Excel.
Athugið. Til að aðgerðin virki, vertu viss um að vista skrána þína sem makróvirka vinnubók (.xlsm).
RegExpExtract setningafræði
RegExpExtract aðgerðin leitar í innsláttarstreng að gildum sem passa við venjulega segð og dregur út eina eða allar samsvörun.
Funkið hefur eftirfarandi setningafræði :
RegExpExtract(texti, mynstur, [tilvik_númer], [samsvarsfall])Hvar:
- Texti (áskilið) - textastrengurinn til að leita í.
- Mynstur (áskilið) - reglubundna segðin sem passa við. Þegar það er afhent beint í formúlu ætti mynstrið að hafa tvöfaldar gæsalappir.
- Tilvik_númer (valfrjálst) - raðnúmer sem gefur til kynna hvaða tilvik á að draga út. Ef því er sleppt, skilar öllum fundnum samsvörun (sjálfgefið).
- Samsvarsfall (valfrjálst) - skilgreinir hvort samsvara eigi eða hunsa hástafi í texta. Ef TRUE eða því er sleppt (sjálfgefið), er samsvörun sem er há og hástöfum framkvæmd; ef FALSE - breytir ekki hástöfum.
Aðgerðin virkar í öllum útgáfum af Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 og Excel 2010.
4 hlutir sem þú ættir að vita um RegExpExtract
Til að nota aðgerðina í Excel á áhrifaríkan hátt eru nokkur mikilvæg atriði sem þarf að taka eftir:
- Sjálfgefið er að aðgerðin skilar öllum fundnum samsvörun í nærliggjandi frumur eins og sýnt er í þessu dæmi. Til að fá tiltekið tilvik, gefðu inn samsvarandi tölu fyrir tilviksnúmer röksemdinni.
- Sjálfgefið er að fallið er hástafankvæmt . Fyrir samsvörun sem er ónæm fyrir hástöfum, stilltu samsvörun_tilfelli röksemdin á FALSE. Vegna VBA-takmarkana mun smíðan (?i) ekki virka.
- Ef gilt mynstur finnst ekki skilar fallið engu (tómur strengur).
- Ef mynstrið er ógilt er #VALUE! villa kemur upp.
Áður en þú byrjar að nota þessa sérsniðnu aðgerð í vinnublöðunum þínum þarftu að skilja hvers hún getur, ekki satt? Dæmin hér að neðan ná yfir nokkur algeng notkunartilvik og útskýra hvers vegna hegðunin getur verið mismunandi í Dynamic Array Excel (Microsoft 365 og Excel 2021) og hefðbundnum Excel (2019 og eldri útgáfur).
Athugið. Út regex dæmi eru skrifuð fyrir frekar einföld gagnasöfn. Við getum ekki ábyrgst að þeir muni virka gallalaust í raunverulegu vinnublöðunum þínum. Þeir sem hafa reynslu af regex eru sammála um að ritun reglulegra tjáninga er endalaus leið til fullkomnunar - næstum alltaf er leið til að gerahann er glæsilegri eða fær um að meðhöndla fjölbreyttari inntaksgögn.
Regex til að draga tölu úr streng
Eftir því grunngildi að kenna „frá einföldu til flóknu“, byrjum við á mjög einföldu máli: að draga tölu úr streng.
The það fyrsta sem þú þarft að ákveða er hvaða númer á að sækja: fyrsta, síðasta, tiltekna tilvik eða allar tölur.
Taktu út fyrstu tölu
Þetta er eins einfalt og regex getur orðið. Í ljósi þess að \d þýðir hvaða tölu sem er frá 0 til 9, og + þýðir einu sinni eða oftar, þá tekur regluleg segð okkar þessa mynd:
Mynstur : \d+
Setja tilviksnúmer til 1 og þú færð þá niðurstöðu sem þú vilt:
=RegExpExtract(A5, "\d+", 1)
Þar sem A5 er upprunalegi strengurinn.
Til þæginda geturðu sett inn mynstrið í fyrirfram skilgreindum reit ($A$2 ) og læstu heimilisfangi þess með $ tákninu:
=RegExpExtract(A5, $A$2, 1)
Fáðu síðustu tölu
Til að draga út síðustu töluna í streng , hér er mynstrið sem á að nota:
Mynstur : (\d+)(?!.*\d)
Þýtt á mannamál , segir: finndu tölu sem er ekki fylgt eftir (hvers staðar, ekki bara strax) af neinni annarri tölu. Til að tjá þetta notum við neikvætt útlit (?!.*\d), sem þýðir að hægra megin við mynstrið á enginn annar stafur (\d) að vera óháð því hversu margir aðrir stafir eru á undan honum.
=RegExpExtract(A5, "(\d+)(?!.*\d)")
Ráð:
- Til að fá sérstakt tilvik skaltu nota \d+ fyrir mynstur og viðeigandi raðnúmertala fyrir tilviksnúmer .
- Fjallað er um formúluna til að draga allar tölur út í næsta dæmi.
Regex til að draga út allar samsvörun
Þú ýtir dæminu okkar aðeins lengra, segjum að þú viljir fá allar tölur úr streng, ekki bara eina.
Eins og þú kannski manst er fjölda útdreginna samsvörunar stjórnað af valfrjálsu tilviksnúmer rök. Sjálfgefið er allar samsvörun, þannig að þú einfaldlega sleppir þessari færibreytu:
=RegExpExtract(A2, "\d+")
Formúlan virkar fallega fyrir einn reit, en hegðunin er mismunandi í Dynamic Array Excel og ekki-dýnamískum útgáfum.
Excel 365 og Excel 2021
Vegna stuðnings við kraftmikla fylki hellist venjuleg formúla sjálfkrafa inn í eins margar frumur og þarf til að birta allar reiknaðar niðurstöður. Hvað varðar Excel, þá er þetta kallað úthellt svið:
Excel 2019 og lægra
Í forvirku Excel myndi formúlan hér að ofan skila aðeins einni samsvörun. Til að fá margar samsvörun þarftu að gera það að fylkisformúlu. Til að gera þetta skaltu velja svið af hólfum, slá inn formúluna og ýta á Ctrl + Shift + Enter til að klára hana.
Galla þessa aðferð er fullt af #N/A villum sem birtast í "auka hólfum" . Því miður er ekkert hægt að gera í því (hvorki IFERROR né IFNA geta lagað það, því miður).
Taktu út allar samsvörun í einum reit
Þegar unnið er úr dálki af gögnum mun ofangreind nálgun augljóslega ekki virka. Í þessu tilfelli, tilvalin lausnværi að skila öllum samsvörunum í einum reit. Til að gera það skaltu setja niðurstöður RegExpExtract í TEXTJOIN fallið og aðskilja þær með hvaða afmörkun sem þú vilt, segðu kommu og bil:
=TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))
Athugið. Þar sem TEXTJOIN aðgerðin er aðeins fáanleg í Excel fyrir Microsoft 365, Excel 2021 og Excel 2019, mun formúlan ekki virka í eldri útgáfum.
Regex til að draga texta úr streng
Takta út úr texta úr streng. tölustafur strengur er frekar krefjandi verkefni í Excel. Með regex verður það auðvelt eins og baka. Notaðu bara afneitaðan flokk til að passa við allt sem er ekki tölustafur.
Mynstur : [^\d]+
Til að fá undirstrengi í einstökum hólfum (spilasvið) , formúlan er:
=RegExpExtract(A5, "[^\d]+")
Til að birta allar samsvörun í einn reit, hreiður RegExpExtract fallið í TEXTJOIN svona:
=TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))
Regex to draga netfang úr streng
Til að draga út netfang úr streng sem inniheldur margar mismunandi upplýsingar skaltu skrifa reglulega tjáningu sem endurtekur uppbygging netfangsins.
Mynstur : [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}
Að brjóta niður þetta regex , hér er það sem við fáum:
- [\w\.\-]+ er notendanafn sem getur innihaldið 1 eða fleiri tölustafi, undirstrik, punkta og bandstrik.
- @ tákn
- [A-Za-z0-9\.\-]+ er lén sem samanstendur af: hástöfum og lágstöfum, tölustöfum, bandstrikum og punktum (efaf undirlénum). Undirstrik eru ekki leyfð hér, því eru notuð 3 mismunandi stafasett (svo sem A-Z a-z og 0-9) í stað \w sem passar við hvaða bókstaf, tölustaf eða undirstrik sem er.
- \.[A-Za-z ]{2,24} er efstu lén. Samanstendur af punkti á eftir stórum og lágstöfum. Flest efstu lén eru 3 stafir að lengd (t.d. .com .org, .edu osfrv.), en í orði geta þau innihaldið frá 2 til 24 stafi (lengsta skráða TLD).
Að því gefnu að strengurinn sé í A5 og mynstrið í A2 er formúlan til að draga út netfang:
=RegExpExtract(A5, $A$2)
Regex til að draga lén úr tölvupósti
Þegar það kemur að því að draga út tölvupóstlén, fyrsta hugsunin sem kemur upp í hugann er að nota myndatökuhóp til að finna texta sem kemur strax á eftir @-stafnum.
Mynstur : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})
Sendu það í RegExp fallið okkar:
=RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")
Og þú munt fá þessa niðurstöðu:
Með klassískum reglulegum tjáningum er ekkert utan tökuhóps ekki innifalið í útdrættinum. Enginn veit hvers vegna VBA RegEx virkar öðruvísi og fangar "@" líka. Til að losna við það geturðu fjarlægt fyrsta stafinn úr niðurstöðunni með því að skipta honum út fyrir tóman streng.
=REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")
Regluleg tjáning til að draga út símanúmer
Símanúmer hægt að skrifa á marga mismunandi vegu, þess vegna er næsta ómögulegt að koma með lausn sem virkar undir öllu(\d{4}úr streng
Venjuleg segð til að draga út dagsetningu fer eftir því á hvaða sniði dagsetningin birtist innan strengs. Til dæmis:
Til að draga út dagsetningar eins og 1/1/21 eða 01/01/2021 er regutextinn: \d{1,2}\/\d{1,2}\/(\d {4}aðstæður. Engu að síður geturðu skrifað niður öll sniðin sem notuð eru í gagnasafninu þínu og reynt að passa við þau.
Fyrir þetta dæmi ætlum við að búa til regex sem mun draga út símanúmer á einhverju af þessum sniðum:
(123) 345-6789 (123) 345 6789 (123)3456789 123- 345-6789 | 123.345.6789 123 345 6789 1233456789 |
Mynstur : \(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b
- Fyrsti hlutinn \(?\d{3} samsvarar núlli eða einum opnunarsvigi og síðan þrír tölustafir d{3}.
- [-\. \)]* hlutinn þýðir hvaða staf sem er innan hornklofa sem kemur fyrir 0 eða oftar: bandstrik, punktur, bil eða lokasvigur.
- Næst höfum við þrjá tölustafi aftur d{3} fylgt eftir með hvaða bandstrik, punktur eða bil [-\. ]? birtist 0 eða 1 sinni.
- Eftir það er hópur fjögurra tölustafa \d{4}.
- Að lokum eru orðamörk \b sem skilgreina að símanúmer sem við erum að leita að getur ekki verið hluti af stærri tölu.
Heilsuformúlan tekur þessa mynd:
=RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")
Vinsamlegast hafðu í huga að ofangreint regex getur skilað nokkrum rangar jákvæðar niðurstöður eins og 123) 456 7899 eða (123 456 7899. Neðangreind útgáfa lagar þessi vandamál. Hins vegar virkar þessi setningafræði aðeins í VBA RegExp aðgerðum, ekki í klassískum reglulegum tjáningum.
Mynstur : (\(\d{3}\)út til að draga út texta á milli tveggja stafa mun einnig virka til að draga út texta á milli tveggja strengja.
Til dæmis, til að fá allt á milli "próf 1" og "próf 2", notaðu eftirfarandi reglulega segð.
Mynstur : próf 1(.*?)próf 2
Heilda formúlan er:
=AblebitsRegexExtract(A5, "test 1(.*?)test 2")
Regex til að draga lén út úr vefslóð
Jafnvel með reglulegum tjáningum er það ekki léttvægt verkefni að draga lén úr vefslóðum. Lykilatriðið sem gerir bragðið er að fanga hópa. Það fer eftir lokamarkmiðinu þínu, veldu eina af regexesunum hér að neðan.
Til að fá fullt lén þar á meðal undirlén
Mynstur : (?: https?\: