Jedwali la yaliyomo
Katika mafunzo haya, utajifunza jinsi ya kutumia misemo ya kawaida katika Excel kutafuta na kutoa mifuatano midogo inayolingana na mchoro fulani.
Microsoft Excel hutoa idadi ya vitendakazi ili kutoa maandishi. kutoka kwa seli. Vitendaji hivyo vinaweza kukabiliana na changamoto nyingi za uchimbaji wa kamba kwenye laha zako za kazi. Wengi, lakini sio wote. Utendakazi wa Maandishi unapojikwaa, misemo ya kawaida huja kuokoa. Subiri… Excel haina vitendaji vya RegEx! Kweli, hakuna vitendaji vilivyojengwa ndani. Lakini hakuna kitu ambacho kingekuzuia kutumia zako mwenyewe :)
Kitendaji cha Excel VBA Regex kutoa mifuatano
Ili kuongeza kitendakazi maalum cha Regex Extract kwenye Excel yako, bandika nambari ifuatayo kwenye kihariri cha VBA. Ili kuwezesha usemi wa kawaida katika VBA, tunatumia kitu kilichojengewa ndani cha Microsoft RegExp.
Public Function RegExpExtract(text As String , pattern As String , Optional example_num As Integer = 0, Optional match_case As Boolean = True ) Dim text_matches() As String Dim match_index As Integer On Error GoTo ErrHandl RegExpExtract = "" Weka regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = pattern regex.Global = True regex.MultiLine = Kweli Ikiwa Kweli = match_case. ignorecase = Uongo Vinginevyo regex.ignorecase = Kweli Mwisho Ikiwa Imeweka inalingana = regex.Execute(text) Ikiwa 0 < mechi.Hesabu Kisha Ikiwa (0 = example_num) Kisha ReDim text_matches(matches.Hesabu - 1, 0) Kwa match_index = 0 KwaVBA RegExp, nakuhimiza usome sehemu inayofuata ambayo inajadili vitendaji vya nguvu zaidi vya .NET Regex.Kitendaji cha Custom .NET based Regex ili kutoa maandishi katika Excel
Tofauti na vitendaji vya VBA RegExp ambavyo inaweza kuandikwa na mtumiaji yeyote wa Excel, .NET RegEx ni eneo la msanidi programu. Microsoft .NET Framework inaauni sintaksia ya kawaida iliyoangaziwa kamili inayooana na Perl 5. Makala haya hayatakufundisha jinsi ya kuandika vitendaji kama hivyo (mimi si mtayarishaji programu na sina wazo hata kidogo la jinsi ya kufanya hivyo :)
Vitendaji vinne vyenye nguvu vilivyochakatwa na injini ya kawaida ya NET RegEx tayari vimeandikwa na wasanidi wetu na vimejumuishwa kwenye Ultimate Suite. Hapo chini, tutaonyesha baadhi ya matumizi ya vitendo ya chaguo za kukokotoa iliyoundwa mahususi kwa ajili ya kutoa maandishi katika Excel.
Kidokezo. Kwa maelezo kuhusu sintaksia ya NET Regex, tafadhali rejelea .NET Lugha ya Kujieleza ya Kawaida.
Jinsi ya kutoa miiba katika Excel kwa kutumia misemo ya kawaida
Ikizingatiwa kuwa una toleo jipya zaidi la Ultimate Suite iliyosakinishwa, kutoa maandishi kwa kutumia misemo ya kawaida hupungua hadi hatua hizi mbili:
- Kwenye kichupo cha Ablebits Data , katika kikundi cha Nakala , bofya Zana za Regex .
- Kwenye kidirisha cha Zana za Regex , chagua chanzo cha data, weka mchoro wako wa Regex, na uchague chaguo la Dondoo . Ili kupata matokeo kama kitendakazi maalum, si thamani, chagua Ingiza kama fomula hundi.sanduku. Ukimaliza, bofya kitufe cha Dondoo .
Matokeo yataonekana katika safu wima mpya upande wa kulia wa data yako asili:
Sintaksia ya AblebitsRegexExtract
Kitendaji chetu maalum kina sintaksia ifuatayo:
AblebitsRegexExtract(rejeleo, usemi_wa_kawaida)Wapi:
- Rejea (inahitajika) - marejeleo ya kisanduku kilicho na mfuatano wa chanzo.
- Maelezo_ya_Kawaida (inahitajika) - muundo wa regex unaolingana.
Dokezo muhimu! Chaguo hili hufanya kazi kwenye mashine zilizosakinishwa Ultimate Suite for Excel pekee.
Maelezo ya matumizi
Ili kufanya mkondo wako wa kujifunza kuwa laini na matumizi yako ya kufurahisha zaidi, tafadhali zingatia pointi hizi:
- Ili kuunda fomula, unaweza kutumia Zana za Regex , au kidirisha cha Ingiza kitendakazi cha Excel, au charaza jina kamili la chaguo la kukokotoa kwenye kisanduku. Mara tu fomula inapoingizwa, unaweza kuidhibiti (kuhariri, kunakili au kusogeza) kama fomula yoyote asili.
- Mchoro unaoweka kwenye kidirisha cha Zana za Regex huenda kwenye hoja ya 2. Inawezekana pia kuweka usemi wa kawaida katika seli tofauti. Katika hali hii, tumia tu marejeleo ya seli kwa hoja ya 2.
- Chaguo za kukokotoa hutoa kulingana kwa mara ya kwanza .
- Kwa chaguo-msingi, chaguo-msingi la kukokotoa ni kesi -nyeti . Kwa ulinganishaji usiojali, tumia mchoro wa (?i).
- Ikiwa haipatikani inayolingana, hitilafu ya #N/A imetokea.imerejeshwa.
Regex ili kutoa mfuatano kati ya herufi mbili
Ili kupata maandishi kati ya herufi mbili, unaweza kutumia kikundi cha kunasa au kuangalia karibu.
Hebu tu sema unatafuta kutoa maandishi kati ya mabano. Kikundi cha kunasa ndiyo njia rahisi zaidi.
Mchoro wa 1 : \[(.*?)\]
Kwa mtazamo mzuri nyuma na mbele, matokeo yatakuwa haswa sawa.
Mchoro wa 2 : (?<=\[)(.*?)(?=\])
Tafadhali zingatia kwamba kikundi chetu cha ukamataji (.*?) hufanya utafutaji wa uvivu kwa maandishi kati ya mabano mawili - kutoka kwa kwanza [ hadi ya kwanza ]. Kikundi cha kunasa bila alama ya kuuliza (.*) kitafanya utafutaji wa pupa na kunasa kila kitu kutoka cha kwanza [ hadi cha mwisho ].
Pamoja na mchoro katika A2, fomula huenda kama ifuatavyo:
=AblebitsRegexExtract(A5, $A$2)
Jinsi ya kupata mechi zote
Kama ilivyotajwa tayari, chaguo la kukokotoa la AblebitsRegexExtract linaweza kutoa mechi moja pekee. Ili kupata mechi zote, unaweza kutumia kitendakazi cha VBA ambacho tumejadili hapo awali. Walakini, kuna tahadhari moja - VBA RegExp haitumii vikundi vya kunasa, kwa hivyo muundo ulio hapo juu utarudisha herufi za "mpaka" vile vile, mabano katika kesi yetu.
=TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))
Ili kujiondoa. kati ya mabano, ABADILISHA kwa mifuatano tupu ("") ukitumia fomula hii:
=SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")
Kwa usomaji bora zaidi, tunatumia koma kwa kitenganishi.
Regex kutoa maandishi kati ya mifuatano miwili
Mbinu ambayo tumeshughulikiaifasiri kihalisi).
Kulingana na usemi gani wa kawaida umeingizwa katika A2, fomula iliyo hapa chini itatoa matokeo tofauti:
=AblebitsRegexExtract(A5, $A$2)
Regex kutoa jina kamili la kikoa na vikoa vidogo vyote:
Regex ili kutoa kiwango cha pili kikoa bila vikoa vidogo:
Hiyo ndiyo jinsi ya kutoa sehemu za maandishi katika Excel kwa kutumia misemo ya kawaida. Ninakushukuru kwa kusoma na kutarajia kukuona kwenye blogu yetu wiki ijayo!
Vipakuliwa vinavyopatikana
Mifano ya Excel Regex Extract (faili.xlsm)
Toleo la majaribio la Ultimate Suite (.exe faili)
\b(0?[0-9]mechi.Hesabu - 1 text_matches(index_matches, 0) = mechi.Kipengee(matches_index) Next match_index RegExpExtract = text_matches Else RegExpExtract = mechi.Kipengee(instance_num - 1) Maliza Ikiisha Ikiwa Toka kwa Kazi ErrHandl: RegExpExtract = CVErrVaxlIkiwa huna uzoefu na VBA, mwongozo wa hatua kwa hatua wa mtumiaji unaweza kukusaidia: Jinsi ya kuingiza msimbo wa VBA katika Excel.
Kumbuka. Ili chaguo hili lifanye kazi, hakikisha kuwa umehifadhi faili yako kama kitabu cha kazi kilichowezeshwa kwa jumla (.xlsm).
Sintaksia ya RegExpExtract
Kitendo cha kukokotoa cha RegExpExtract hutafuta mfuatano wa ingizo kwa thamani zinazolingana na usemi wa kawaida na kutoa ulinganifu mmoja au zote.
Chaguo za kukokotoa zina sintaksia ifuatayo. :
RegExpExtract(maandishi, mchoro, [instance_num], [match_case])Wapi:
- Maandishi (inahitajika) - mfuatano wa maandishi wa kutafuta.
- Muundo (inahitajika) - usemi wa kawaida wa kulinganisha. Inapotolewa moja kwa moja katika fomula, mchoro unapaswa kuambatanishwa kwa alama mbili za nukuu.
- Mfano_num (si lazima) - nambari ya mfuatano inayoonyesha ni mfano gani wa kutoa. Ikiondolewa, hurejesha ulinganifu wote uliopatikana (chaguo-msingi).
- Match_case (si lazima) - hufafanua iwapo italingana au kupuuza herufi za maandishi. Iwapo TRUE au imeachwa (chaguo-msingi), ulinganishaji unaozingatia ukubwa unafanywa; ikiwa FALSE - haizingatii kesi.
Chaguo hili hufanya kazi katika matoleo yote ya Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 na Excel 2010.
Mambo 4 unapaswa kujua kuhusu RegExpExtract
Ili kutumia chaguo hili kwa ufanisi katika Excel yako, kuna mambo machache muhimu ya kuzingatia:
- Kwa chaguo-msingi, chaguo-msingi hurejesha zote zinazolingana katika visanduku jirani kama inavyoonyeshwa katika mfano huu. Ili kupata tukio mahususi, toa nambari inayolingana kwa hoja ya instance_num .
- Kwa chaguomsingi, chaguo-msingi ni nyeti-kesi . Kwa ulinganifu usiojali kesi, weka hoja ya match_case kuwa FALSE. Kwa sababu ya mapungufu ya VBA, muundo ambao haujali ukubwa wa herufi (?i) hautafanya kazi.
- Ikiwa mchoro halali haupatikani , chaguo la kukokotoa halirudishi chochote (kamba tupu).
- Ikiwa muundo ni batili , #THAMANI! hitilafu hutokea.
Kabla ya kuanza kutumia chaguo za kukokotoa maalum katika laha zako za kazi, unahitaji kuelewa ni uwezo gani, sivyo? Mifano iliyo hapa chini inashughulikia matukio machache ya matumizi ya kawaida na kueleza kwa nini tabia inaweza kutofautiana katika Dynamic Array Excel (Microsoft 365 na Excel 2021) na Excel ya kitamaduni (2019 na matoleo ya awali).
Kumbuka. Mifano ya regex imeandikwa kwa seti rahisi za data. Hatuwezi kukuhakikishia watafanya kazi bila dosari katika laha zako za kazi halisi. Wale ambao wana uzoefu na regex watakubali kwamba kuandika misemo ya kawaida ni barabara isiyoisha ya ukamilifu - karibu kila wakati kuna njia ya kufanya.ni ya kifahari zaidi au yenye uwezo wa kushughulikia anuwai pana ya data ya ingizo.
Regex ili kutoa nambari kutoka kwa mfuatano
Kwa kufuata kanuni ya msingi ya kufundisha "kutoka rahisi hadi ngumu", tutaanza na kesi rahisi sana: kutoa nambari kutoka kwa mfuatano.
The jambo la kwanza kwako kuamua ni nambari gani ya kurejesha: kwanza, mwisho, tukio maalum au nambari zote.
Nyoa nambari ya kwanza
Hii ni rahisi jinsi regex inavyoweza kupata. Ikizingatiwa kuwa \d inamaanisha nambari yoyote kutoka 0 hadi 9, na + inamaanisha mara moja au zaidi, usemi wetu wa kawaida huchukua fomu hii:
Muundo : \d+
Weka nambari_ya_mfano hadi 1 na utapata matokeo unayotaka:
=RegExpExtract(A5, "\d+", 1)
Ambapo A5 ni mfuatano asili.
Kwa urahisi, unaweza kuingiza mchoro katika kisanduku kilichobainishwa awali ($A$2 ) na ufunge anwani yake kwa ishara $:
=RegExpExtract(A5, $A$2, 1)
Pata nambari ya mwisho
Ili kutoa nambari ya mwisho katika mfuatano , huu ndio muundo wa kutumia:
Muundo : (\d+)(?!.*\d)
Imetafsiriwa katika lugha ya binadamu , inasema: pata nambari ambayo haifuatwi (popote, sio mara moja) na nambari nyingine yoyote. Ili kueleza hili, tunatumia mtazamo hasi (?!.*\d), ambayo ina maana kwamba upande wa kulia wa muundo kusiwe na tarakimu nyingine (\d) bila kujali ni herufi ngapi ziko mbele yake.
=RegExpExtract(A5, "(\d+)(?!.*\d)")
Vidokezo:
- Ili kupata tukio mahususi , tumia \d+ kwa muundo na mfululizo unaofaanambari ya mfano_num .
- Mfumo wa kutoa nambari zote inajadiliwa katika mfano unaofuata.
Regex ili kutoa mechi zote 11>
Tukisukuma mfano wetu mbele kidogo, tuseme unataka kupata nambari zote kutoka kwa mfuatano, si moja tu.
Kama unavyoweza kukumbuka, idadi ya mechi zilizotolewa inadhibitiwa na chaguo la mfano_num hoja. Chaguo-msingi ni zinazolingana zote, kwa hivyo unaacha tu kigezo hiki:
=RegExpExtract(A2, "\d+")
Mchanganyiko hufanya kazi vizuri kwa kisanduku kimoja, lakini tabia hutofautiana katika Mipangilio ya Dynamic Excel na matoleo yasiyobadilika.
Excel 365 na Excel 2021
Kwa sababu ya kutumia safu zinazobadilika, fomula ya kawaida humwagika kiotomatiki katika visanduku vingi inavyohitajika ili kuonyesha matokeo yote yaliyokokotolewa. Kwa mujibu wa Excel, hii inaitwa safu iliyomwagika:
Excel 2019 na chini
Katika Excel-dynamic pre-dynamic, fomula iliyo hapo juu inaweza kurejesha mechi moja tu. Ili kupata mechi nyingi, unahitaji kuifanya fomula ya safu. Ili kufanya hivyo, chagua visanduku vingi, andika fomula, na ubofye Ctrl + Shift + Enter ili kuikamilisha.
Upande mbaya wa mbinu hii ni rundo la hitilafu za #N/A zinazoonekana katika "kisanduku cha ziada" . Kwa kusikitisha, hakuna kinachoweza kufanywa juu yake (wala IFERROR wala IFNA haiwezi kuirekebisha, ole).
Nyoa zinazolingana zote katika kisanduku kimoja
Unapochakata safu wima ya data, mbinu iliyo hapo juu bila shaka haitafanya kazi. Katika kesi hii, suluhisho boraitakuwa inarejesha mechi zote katika seli moja. Ili kuifanya, toa matokeo ya RegExpExtract kwa chaguo za kukokotoa TEXTJOIN na uyatenge na kikomo chochote unachopenda, sema koma na nafasi:
=TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))
Kumbuka. Kwa sababu chaguo la kukokotoa la TEXTJOIN linapatikana tu katika Excel kwa Microsoft 365, Excel 2021 na Excel 2019, fomula haitafanya kazi katika matoleo ya awali.
Regex ili kutoa maandishi kutoka kwa mfuatano
Kutoa maandishi kutoka kamba ya alphanumeric ni kazi ngumu sana katika Excel. Na regex, inakuwa rahisi kama pai. Tumia tu darasa lililopuuzwa ili kulinganisha kila kitu ambacho si tarakimu.
Muundo : [^\d]+
Ili kupata mifuatano midogo katika visanduku mahususi (masafa ya kumwagika) , fomula ni:
=RegExpExtract(A5, "[^\d]+")
Ili kutoa mechi zote kwenye kisanduku kimoja, weka kitendakazi cha RegExpExtract katika TEXTJOIN kama hii:
=TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))
Regex hadi toa barua pepe kutoka kwa mfuatano
Ili kutoa barua pepe kutoka kwa mfuatano ulio na taarifa nyingi tofauti, andika usemi wa kawaida unaoiga muundo wa anwani ya barua pepe.
Muundo : [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}
Kuvunja regex hii , haya ndiyo tunayopata:
- [\w\.\-]+ ni jina la mtumiaji ambalo linaweza kujumuisha herufi 1 au zaidi ya alphanumeric, mistari chini, nukta na vistari.
- @ ishara.
- [A-Za-z0-9\.\-]+ ni jina la kikoa linalojumuisha: herufi kubwa na ndogo, tarakimu, viambato na vitone (ikiwa ni lazimaya vikoa vidogo). Mistari ya chini hairuhusiwi hapa, kwa hivyo seti 3 tofauti za herufi (kama vile A-Z a-z na 0-9) zinatumika badala ya \w zinazolingana na herufi, tarakimu au kistari chochote.
- \.[A-Za-z ]{2,24} ni kikoa cha kiwango cha juu. Hujumuisha nukta ikifuatwa na herufi kubwa na ndogo. Vikoa vingi vya kiwango cha juu vina urefu wa herufi 3 (k.m. .com .org, .edu, n.k.), lakini kwa nadharia inaweza kuwa na kuanzia herufi 2 hadi 24 (TLD ndefu zaidi iliyosajiliwa).
Kwa kuchukulia kuwa mfuatano uko katika A5 na mchoro katika A2, fomula ya kutoa anwani ya barua pepe ni:
=RegExpExtract(A5, $A$2)
Regex ili kutoa kikoa kutoka kwa barua pepe
Inapofanywa inakuja kwenye kutoa kikoa cha barua pepe, wazo la kwanza linalokuja akilini ni kutumia kikundi cha kunasa kupata maandishi ambayo yanafuata mara moja herufi @.
Pattern : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})
Itumie kwa kipengele chetu cha RegExp:
=RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")
Na utapata matokeo haya:
Kwa misemo ya kawaida ya kawaida, kitu chochote nje ya kikundi cha kunasa hakijumuishwi kwenye uchomozi. Hakuna anayejua kwa nini VBA RegEx inafanya kazi tofauti na kunasa "@" pia. Ili kuiondoa, unaweza kuondoa herufi ya kwanza kwenye tokeo kwa kuibadilisha na mfuatano tupu.
=REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")
Kujieleza mara kwa mara ili kutoa nambari za simu
Nambari za simu. inaweza kuandikwa kwa njia nyingi tofauti, ndiyo sababu haiwezekani kupata suluhisho linalofanya kazi chini ya yote(\d{4}kutoka kwa kamba
Usemi wa kawaida wa kutoa tarehe unategemea umbizo ambalo tarehe inaonekana ndani ya mfuatano. Kwa mfano:
Kutoa tarehe kama vile 1/1/21 au 01/01/2021, regex ni: \d{1,2}\/\d{1,2}\/(\d {4}mazingira. Hata hivyo, unaweza kuandika fomati zote zinazotumiwa katika mkusanyiko wako wa data na kujaribu kuzilinganisha.
Kwa mfano huu, tutaunda regex ambayo itatoa nambari za simu katika muundo wowote kati ya hizi:
(123) 345-6789 (123) 345 6789 (123)3456789 123- 345-6789 | 123.345.6789 123 345 6789 1233456789 |
- Sehemu ya kwanza \(?\d{3} inalingana na sifuri au mabano moja ya ufunguzi ikifuatwa na tarakimu tatu d{3}.
- Sehemu ya [-\. \)]* inamaanisha herufi yoyote katika mabano ya mraba inayoonekana mara 0 au zaidi: kistari, kipindi, nafasi au mabano ya kufunga.
- Inayofuata, tuna tarakimu tatu tena d{3} ikifuatiwa na kistari, kipindi au nafasi yoyote [-\. ]? inayoonekana mara 0 au 1.
- Baada ya hapo, kuna kundi la tarakimu nne \d{4}.
- Mwishowe, kuna mpaka wa neno \b unaofafanua kwamba sisi ni nambari ya simu. kutafuta hakuwezi kuwa sehemu ya nambari kubwa zaidi.
Mfumo kamili huchukua umbo hili:
=RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")
Tafadhali fahamu kuwa regex iliyo hapo juu inaweza kurudisha chache. matokeo chanya ya uwongo kama vile 123) 456 7899 au (123 456 7899. Toleo lililo hapa chini linasuluhisha masuala haya. Hata hivyo, sintaksia hii inafanya kazi katika vitendaji vya VBA RegExp pekee, si kwa vielezi vya kawaida vya kawaida.
Muundo : (\(\d{3}\)out kwa ajili ya kutoa maandishi kati ya herufi mbili pia itafanya kazi kwa kutoa maandishi kati ya mifuatano miwili.
Kwa mfano, kupata kila kitu kati ya "test 1" na "test 2", tumia usemi ufuatao wa kawaida.
Muundo : jaribio la 1(.*?)jaribio 2
Mfumo kamili ni:
=AblebitsRegexExtract(A5, "test 1(.*?)test 2")
Regex ili kutoa kikoa kutoka kwa URL
Hata kwa misemo ya kawaida, kutoa majina ya vikoa kutoka kwa URLs si kazi ndogo. Kipengele muhimu kinachofanya hila ni makundi yasiyo ya kukamata. Kulingana na lengo lako kuu, chagua mojawapo ya regeksi zilizo hapa chini.
Ili kupata jina kamili la kikoa ikijumuisha vikoa vidogo
Muundo : (?: https?\: