Regex merkkijonojen poimimiseen Excelissä (yksi tai kaikki ottelut)

  • Jaa Tämä
Michael Brown

Tässä opetusohjelmassa opit käyttämään säännöllisiä lausekkeita Excelissä tietyn kuvion mukaisten merkkijonojen etsimiseen ja poimimiseen.

Microsoft Excel tarjoaa useita funktioita tekstin poimimiseen soluista. Nämä funktiot selviytyvät useimmista merkkijonojen poimimiseen liittyvistä haasteista työarkissasi. Useimmista, mutta ei kaikista. Kun tekstifunktiot kompastuvat, säännölliset lausekkeet tulevat apuun. Odota... Excelissä ei ole RegEx-funktioita! Totta, ei sisäänrakennettuja funktioita. Mikään ei kuitenkaan estä käyttämästä omia funktioita :)

    Excel VBA Regex -funktio merkkijonojen poimimiseksi

    Voit lisätä mukautetun Regex Extract -toiminnon Exceliin liittämällä seuraavan koodin VBA-editoriin. Jotta säännölliset lausekkeet voidaan ottaa käyttöön VBA:ssa, käytämme sisäänrakennettua Microsoft RegExp -objektia.

    Public Function RegExpExtract(text As String , pattern As String , Optional instance_num As Integer = 0, Optional match_case As Boolean = True ) Dim text_matches() As String Dim matches_index As Integer On Error GoTo ErrHandl RegExpExtract = "" Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = pattern regex.Global = True regex.MultiLine = True If True = match_case Thenregex.ignorecase = False Else regex.ignorecase = True End If Set matches = regex.Execute(text) If 0 <matches.Count Then If (0 = instance_num) Then ReDim text_matches(matches.Count - 1, 0) For matches_indeksi = 0 To matches.Count - 1 text_matches(matches_indeksi, 0) = matches.Item(matches_indeksi) Next matches_indeksi RegExpExpExtract = text_matches Else RegExpExpExtract = matches.Item(instance_num - 1) EndIf End If Exit Function ErrHandl: RegExpExtract = CVErr(xlErrValue) End Function

    Jos sinulla on vain vähän kokemusta VBA:sta, vaiheittaisesta käyttöoppaasta voi olla apua: VBA-koodin lisääminen Exceliin.

    Huomautus: Jotta toiminto toimisi, muista tallentaa tiedostosi tiedostona makrotoiminnoilla varustettu työkirja (.xlsm).

    RegExpExtract-syntaksi

    The RegExpExtract funktio etsii syöttömerkkijonosta arvoja, jotka vastaavat säännöllistä lauseketta, ja poimii yhden tai kaikki osumat.

    Funktio on syntaksiltaan seuraava:

    RegExpExtract(text, pattern, [instance_num], [match_case])

    Missä:

    • Teksti (pakollinen) - tekstijono, josta haetaan.
    • Kuvio (pakollinen) - Säännöllinen lauseke, jota on tarkoitus verrata. Kun malli annetaan suoraan kaavassa, se on suljettava kaksinkertaisiin lainausmerkkeihin.
    • Instance_num (valinnainen) - sarjanumero, joka osoittaa, mikä instanssi poimitaan. Jos se jätetään pois, palautetaan kaikki löydetyt osumat (oletusarvo).
    • Match_case (valinnainen) - määrittelee, sovitetaanko tekstin isoja ja pieniä kirjaimia vai jätetäänkö ne huomioimatta. Jos TRUE tai jätetään pois (oletusarvo), sovitus tehdään isojen ja pienten kirjainten perusteella; jos FALSE - isojen ja pienten kirjainten perusteella.

    Toiminto toimii kaikissa Excel 365-, Excel 2021-, Excel 2019-, Excel 2016-, Excel 2013- ja Excel 2010 -versioissa.

    4 asiaa, jotka sinun pitäisi tietää RegExpExtractista

    Jotta voit käyttää toimintoa tehokkaasti Excelissäsi, on otettava huomioon muutamia tärkeitä asioita:

    1. Oletusarvoisesti funktio palauttaa kaikki löydetyt ottelut viereisiin soluihin, kuten tässä esimerkissä on esitetty. Jos haluat saada tietyn esiintymän, anna vastaava numero kenttään instance_num argumentti.
    2. Oletusarvoisesti toiminto on case-sensitive Jos haluat täsmäytyksen ilman isoja ja pieniä kirjaimia, aseta asetukset match_case argumentin arvoksi FALSE. VBA:n rajoitusten vuoksi isojen ja pienten kirjainten erittelemätön rakenne (?i) ei toimi.
    3. Jos kelvollista mallia ei löydy , funktio ei palauta mitään (tyhjä merkkijono).
    4. Jos kuvio on virheellinen , tapahtuu #VALUE! -virhe.

    Ennen kuin alat käyttää tätä mukautettua funktiota työarkkeissasi, sinun on ymmärrettävä, mihin se pystyy, eikö niin? Alla olevat esimerkit kattavat muutamia yleisiä käyttötapauksia ja selittävät, miksi käyttäytyminen voi vaihdella Dynamic Array Excelissä (Microsoft 365 ja Excel 2021) ja perinteisessä Excelissä (2019 ja vanhemmat versiot).

    Huom. Out regex-esimerkit on kirjoitettu reilun yksinkertaisille tietokokonaisuuksille. Emme voi taata, että ne toimivat moitteettomasti todellisissa työarkkeissasi. Ne, joilla on kokemusta regexistä, ovat varmasti samaa mieltä siitä, että säännöllisten lausekkeiden kirjoittaminen on loputon tie kohti täydellisyyttä - melkein aina löytyy keino tehdä siitä tyylikkäämpi tai pystyä käsittelemään laajempaa valikoimaa syötetietoja.

    Regex poimia numero merkkijonosta

    Opetuksen perusperiaatteen "yksinkertaisesta monimutkaiseen" mukaisesti aloitamme hyvin yksinkertaisesta tapauksesta: numeron poimiminen merkkijonosta.

    Ensimmäiseksi sinun on päätettävä, mikä numero haetaan: ensimmäinen, viimeinen, tietty esiintymä vai kaikki numerot.

    Ote ensimmäisestä numerosta

    Tämä on niin yksinkertaista kuin regex voi olla. Koska \d tarkoittaa mitä tahansa numeroa 0-9 ja + tarkoittaa yhtä tai useampaa kertaa, säännöllinen lausekkeemme on seuraavanlainen:

    Kuvio : \d+

    Aseta instance_num arvoon 1, niin saat halutun tuloksen:

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

    A5 on alkuperäinen merkkijono.

    Yksinkertaisuuden vuoksi voit syöttää kuvion ennalta määritettyyn soluun ($A$2 ) ja lukita sen osoitteen $-merkillä:

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

    Hae viimeinen numero

    Jos haluat poimia merkkijonon viimeisen numeron, käytä seuraavaa mallia:

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

    Ihmiskielelle käännettynä se sanoo: etsi luku, jota ei seuraa (missään, ei vain välittömästi) mikään muu luku. Tämän ilmaisemiseksi käytämme negatiivista lookaheadia (?!.*\d), mikä tarkoittaa, että kuvion oikealla puolella ei saa olla mitään muuta numeroa (\d) riippumatta siitä, kuinka monta muuta merkkiä sitä ennen on.

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

    Vinkkejä:

    • Saadaksesi erityinen tapahtuma , käytä \d+ varten kuvio ja asianmukainen sarjanumero instance_num .
    • Kaava, jolla uutetaan kaikki numerot käsitellään seuraavassa esimerkissä.

    Regex poimia kaikki osumat

    Jos esimerkkiä viedään hieman pidemmälle, oletetaan, että haluat saada merkkijonosta kaikki numerot, etkä vain yhtä.

    Kuten ehkä muistat, poimittujen osumien määrää ohjataan valinnaisella parametrilla instance_num Oletusarvo on kaikki osumat, joten jätä tämä parametri yksinkertaisesti pois:

    =RegExpExtract(A2, "\d+")

    Kaava toimii hienosti yhden solun osalta, mutta käyttäytyminen eroaa Dynamic Array Excelissä ja ei-dynaamisissa versioissa.

    Excel 365 ja Excel 2021

    Dynaamisten matriisien tuen ansiosta tavallinen kaava leviää automaattisesti niin moneen soluun kuin on tarpeen kaikkien laskettujen tulosten näyttämiseksi. Excelin kannalta tätä kutsutaan levitetyksi alueeksi:

    Excel 2019 ja alempi

    Ennen dynaamista Exceliä yllä oleva kaava palauttaisi vain yhden osuman. Jos haluat saada useita osumia, sinun on tehtävä siitä matriisikaava. Valitse tätä varten solualue, kirjoita kaava ja täydennä se painamalla Ctrl + Shift + Enter.

    Tämän lähestymistavan haittapuolena on joukko #N/A-virheitä, jotka ilmestyvät "ylimääräisiin soluihin". Valitettavasti asialle ei voi tehdä mitään (IFERROR tai IFNA eivät valitettavasti pysty korjaamaan sitä).

    Pura kaikki osumat yhdestä solusta

    Kun käsitellään sarakkeen tietoja, edellä mainittu lähestymistapa ei tietenkään toimi. Tässä tapauksessa ihanteellinen ratkaisu olisi palauttaa kaikki osumat yhdessä solussa. Se tehdään tarjoamalla RegExpExtractin tulokset TEXTJOIN-funktiolle ja erottamalla ne haluamallasi erottimella, esimerkiksi pilkulla ja välilyönnillä:

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

    Huomautus: Koska TEXTJOIN-toiminto on käytettävissä vain Excel for Microsoft 365:ssä, Excel 2021:ssä ja Excel 2019:ssä, kaava ei toimi vanhemmissa versioissa.

    Regex poimia tekstiä merkkijonosta

    Tekstin poimiminen aakkosnumeerisesta merkkijonosta on melko haastava tehtävä Excelissä. Regexin avulla siitä tulee helppoa kuin mikä. Käytä vain negaatioluokkaa, joka vastaa kaikkea, mikä ei ole numero.

    Kuvio : [^\d]+

    Jos haluat saada yksittäisten solujen (vuotoalue) merkkijonojen alajonot, kaava on seuraava:

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

    Jos haluat tulostaa kaikki osumat yhteen soluun, sijoita RegExpExtract-funktio TEXTJOINiin seuraavasti:

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

    Regex poimia sähköpostiosoite merkkijonosta

    Jos haluat poimia sähköpostiosoitteen merkkijonosta, joka sisältää paljon erilaisia tietoja, kirjoita säännöllinen lauseke, joka jäljittelee sähköpostiosoitteen rakennetta.

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

    Kun tämä regex puretaan, saadaan seuraavaa:

    • [\w\.\-]+ on käyttäjänimi, joka voi sisältää yhden tai useamman aakkosnumeerisen merkin, alleviivoja, pisteitä ja väliviivoja.
    • @ symboli
    • [A-Za-z0-9\.\-]+ on verkkotunnusnimi, joka koostuu isoista ja pienistä kirjaimista, numeroista, väliviivoista ja pisteistä (jos kyseessä on aliverkkotunnus). Alleviivaukset eivät ole sallittuja, joten \w:n sijasta käytetään kolmea erilaista merkkikokonaisuutta (kuten A-Z a-z ja 0-9), jotka vastaavat mitä tahansa kirjainta, numeroa tai alleviivausta.
    • \.[A-Za-z]{2,24} on ylätason verkkotunnus, joka koostuu pisteestä ja sitä seuraavista isoista ja pienistä kirjaimista. Useimmat ylätason verkkotunnukset ovat kolmen kirjaimen pituisia (esim. .com .org, .edu jne.), mutta teoriassa se voi sisältää 2-24 kirjainta (pisin rekisteröity aluetunnus).

    Olettaen, että merkkijono on A5:ssä ja kuvio A2:ssa, kaava sähköpostiosoitteen poimimiseksi on:

    =RegExpExtract(A5, $A$2)

    Regex poimia verkkotunnuksen sähköpostista

    Kun on kyse sähköpostin verkkotunnuksen poimimisesta, ensimmäinen ajatus, joka tulee mieleen, on käyttää sieppausryhmää @-merkkiä välittömästi seuraavan tekstin löytämiseksi.

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

    Tarjoile se RegExp-funktiolle:

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

    Ja saat tämän tuloksen:

    Klassisissa säännöllisissä lausekkeissa kaikki kaappausryhmän ulkopuolella olevat merkit eivät sisällytetä poimintaan. Kukaan ei tiedä, miksi VBA RegEx toimii toisin ja kaappaa myös "@":n. Voit päästä siitä eroon poistamalla ensimmäisen merkin tuloksesta korvaamalla sen tyhjällä merkkijonolla.

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

    Säännöllinen lauseke puhelinnumeroiden poimimiseksi

    Puhelinnumerot voidaan kirjoittaa monella eri tavalla, minkä vuoksi on lähes mahdotonta keksiä kaikissa olosuhteissa toimivaa ratkaisua. Voit kuitenkin kirjoittaa ylös kaikki aineistossasi käytetyt muodot ja yrittää sovittaa ne yhteen.

    Tässä esimerkissä luomme regexin, joka poimii puhelinnumerot missä tahansa näistä muodoista:

    (123) 345-6789

    (123) 345 6789

    (123)3456789

    123-345-6789

    123.345.6789

    123 345 6789

    1233456789

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

    • Ensimmäinen osa \(?\d{3} vastaa nollaa tai yhtä avaavaa sulkeumaa, jota seuraa kolme numeroa d{3}.
    • [-\. \)]* tarkoittaa mitä tahansa hakasulkeissa olevaa merkkiä, joka esiintyy vähintään 0 kertaa: väliviiva, piste, välilyönti tai sulkeva sulku.
    • Seuraavaksi on taas kolme numeroa d{3}, jota seuraa mikä tahansa väliviiva, piste tai välilyönti [-\. ]?, joka esiintyy 0 tai 1 kertaa.
    • Sen jälkeen on neljän numeron ryhmä \d{4}.
    • Lopuksi on olemassa sanarajoitus \b, joka määrittää, että etsimämme puhelinnumero ei voi olla osa suurempaa numeroa.

    Täydellinen kaava on seuraavanlainen:

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

    Huomaa, että yllä oleva regex voi palauttaa muutamia vääriä positiivisia tuloksia, kuten 123) 456 7899 tai (123 456 7899. Alla oleva versio korjaa nämä ongelmat. Tämä syntaksi toimii kuitenkin vain VBA:n RegExp-funktioissa, ei klassisissa säännöllisissä lausekkeissa.

    Kuvio : (\(\d{3}\)

    Regex poimia päivämäärä merkkijonosta

    Säännöllinen lauseke päivämäärän poimimiseksi riippuu siitä, missä muodossa päivämäärä esiintyy merkkijonossa. Esimerkiksi:

    Jos haluat poimia päivämääriä kuten 1/1/21 tai 01/01/2021, regex on: \d{1,2}\/\d{1,2}\/(\d{4})

    Se etsii 1- tai 2-numeroisen ryhmän d{1,2}, jota seuraa vinoviiva, jota seuraa toinen 1- tai 2-numeroinen ryhmä, jota seuraa vinoviiva, jota seuraa 4- tai 2-numeroinen ryhmä (\d{4}).ensimmäinen ehto on vuorottelussa TAI-konstruktiossa, muita ehtoja ei tarkisteta.

    Jos haluat hakea päivämääriä kuten 1-Jan-21 tai 01-Jan-2021, malli on: \d{1,2}-[A-Za-z]{3}-\d{2,4}.

    Se etsii 1 tai 2 numeron ryhmää, jota seuraa väliviiva, jota seuraa 3 ison tai pienen kirjaimen ryhmä, jota seuraa väliviiva, jota seuraa 4 tai 2 numeron ryhmä.

    Kun nämä kaksi mallia on yhdistetty, saadaan seuraava regex:

    Kuvio : \b\d{1,2}[\/-](\d{1,2})

    Missä:

    • Ensimmäinen osa on 1- tai 2-numeroinen: \d{1,2}
    • Toinen osa on joko 1 tai 2 numeroa tai 3 kirjainta: (\d{1,2}).
    • Kolmas osa on neljän tai kahden numeron ryhmä: (\d{4}).
    • Erotin on joko vinoviiva tai väliviiva: [\/-]
    • Molemmilla puolilla on sananraja \b, joka tekee selväksi, että päivämäärä on erillinen sana eikä osa suurempaa merkkijonoa.

    Kuten alla olevasta kuvasta näkyy, se poimii onnistuneesti päivämäärät ja jättää pois merkkijonot, kuten 11/22/333. Se palauttaa kuitenkin edelleen vääriä positiivisia tuloksia. Meidän tapauksessamme merkkijono 11-ABC-2222 kohdassa A9 vastaa teknisesti päivämäärän muotoa. dd-mmm-yyyyyy ja siksi se uutetaan.

    Väärien positiivisten tulosten eliminoimiseksi voit korvata [A-Za-z]{3}-osan täydellisellä luettelolla 3-kirjaimisista kuukauden lyhenteistä:

    Kuvio : \b\d{1,2}[\/-](\d{1,2})

    Jotta kirjainkirjaimet jätettäisiin huomiotta, asetamme mukautetun funktiomme viimeisen argumentin arvoksi FALSE:

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

    Ja tällä kertaa saamme täydellisen tuloksen:

    Regex poimia aika merkkijonosta

    Saadakseen aikaa hh:mm tai hh:mm:ss muodossa, seuraava lauseke toimii hyvin.

    Kuvio : \b(0?[0-9]

    Kun tämä regex puretaan, voit nähdä 2 osaa, jotka on erotettu toisistaan

    Ilmaisu 1 : \b(0?[0-9]

    Noudattaa kellonajat AM/PM.

    Tunti voi olla mikä tahansa luku välillä 0-12. Sen saamiseksi käytetään OR-konstruktiota ([0-9]).

    • [0-9] vastaa mitä tahansa numeroa 0:sta 9:ään.
    • 1[0-2] vastaa mitä tahansa numeroa välillä 10-12.

    Minuutti [0-5]\d on mikä tahansa numero välillä 00-59.

    Toinen (:[0-5]\d)? on myös mikä tahansa luku välillä 00-59. ?-kvantiteetti tarkoittaa nollaa tai yhtä esiintymää, koska sekunnit voivat sisältyä aika-arvoon tai olla sisältymättä siihen.

    Ilmaisu 2 : \b([0-9]

    Poistaa kellonajat ilman AM/PM.

    The tunti osa voi olla mikä tahansa luku välillä 0-32. Sen saamiseksi tarvitaan erilainen OR-konstruktio ([0-9]).

    • [0-9] vastaa mitä tahansa numeroa 0:sta 9:ään.
    • [0-1]\d vastaa mitä tahansa numeroa välillä 00-19.
    • 2[0-3] vastaa mitä tahansa numeroa välillä 20-23.

    The minuutti ja toinen osat ovat samat kuin edellä lausekkeessa 1.

    Negatiivinen lookahead (?!:) lisätään ohitusmerkkijonoihin, kuten 20:30:80.

    Koska PM/AM voi olla joko isoja tai pieniä kirjaimia, emme huomioi toiminnossa isoja ja pieniä kirjaimia:

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

    Toivottavasti yllä olevat esimerkit antoivat sinulle ideoita siitä, miten voit käyttää säännöllisiä lausekkeita Excel-työskentelytaulukoissa. Valitettavasti kaikkia klassisten säännöllisten lausekkeiden ominaisuuksia ei tueta VBA:ssa. Jos tehtävääsi ei voi suorittaa VBA RegExp:llä, kehotan sinua lukemaan seuraavan osan, jossa käsitellään paljon tehokkaampia .NET Regex -funktioita.

    Mukautettu .NET-pohjainen Regex-funktio tekstin poimimiseksi Excelissä

    Toisin kuin VBA:n RegExp-funktiot, jotka kuka tahansa Excel-käyttäjä voi kirjoittaa, .NET RegEx on kehittäjän valtakunta. Microsoft .NET Framework tukee täydellistä säännöllisten lausekkeiden syntaksia, joka on yhteensopiva Perl 5:n kanssa. Tässä artikkelissa ei opeteta kirjoittamaan tällaisia funktioita (en ole ohjelmoija eikä minulla ole pienintäkään aavistusta siitä, miten se tehdään :)

    Kehittäjämme ovat jo kirjoittaneet neljä tehokasta funktiota, joita käsitellään tavallisella .NET RegEx -moottorilla ja jotka sisältyvät Ultimate Suite -ohjelmaan. Seuraavassa esitellään joitakin käytännön käyttötapoja funktiolle, joka on suunniteltu erityisesti tekstin poimimiseen Excelistä.

    Vihje. Lisätietoja .NET Regex -syntaksista on kohdassa .NET Regular Expression Language.

    Miten poimia pistoja Excelistä säännöllisillä lausekkeilla?

    Olettaen, että sinulla on asennettuna Ultimate Suite -ohjelman uusin versio, tekstin poimiminen säännöllisten lausekkeiden avulla koostuu näistä kahdesta vaiheesta:

    1. On Ablebits Data välilehdellä, kohdassa Teksti ryhmää, klikkaa Regex-työkalut .
    2. On Regex-työkalut ruudussa, valitse lähdetiedot, syötä Regex-kuvio ja valitse valintaikkuna Ote Jos haluat saada tuloksen mukautettuna funktiona, etkä arvona, valitse vaihtoehto Lisää kaavana Kun olet valmis, napsauta valintaruutua Ote nappi.

    Tulokset näkyvät uudessa sarakkeessa alkuperäisten tietojen oikealla puolella:

    AblebitsRegexExtract syntaksi

    Mukautetun funktiomme syntaksi on seuraava:

    AblebitsRegexExtract(reference, regular_expression)

    Missä:

    • Viite (pakollinen) - viittaus soluun, joka sisältää lähdejonon.
    • Säännöllinen_ilmaus (pakollinen) - täsmäävä regex-kuvio.

    Tärkeä huomautus: toiminto toimii vain koneissa, joihin on asennettu Ultimate Suite for Excel.

    Käyttöä koskevat huomautukset

    Jotta oppimiskäyräsi olisi sujuvampi ja kokemuksesi miellyttävämpi, kiinnitä huomiota näihin kohtiin:

    1. Voit luoda kaavan käyttämällä Regex-työkalut tai Excelin Lisää toiminto Kun kaava on lisätty, voit hallita sitä (muokata, kopioida tai siirtää) kuten mitä tahansa alkuperäistä kaavaa.
    2. Kuvio, jonka syötät kenttään Regex-työkalut ruudussa menee 2. argumenttiin. On myös mahdollista pitää säännöllinen lauseke erillisessä solussa. Tässä tapauksessa käytä vain soluviitettä 2. argumenttia varten.
    3. Funktio poimii ensimmäinen löydetty ottelu .
    4. Oletusarvoisesti toiminto on case-sensitive Käytä (?i)-mallia, jos haluat käyttää isojen ja pienten kirjainten erottelematonta täsmäytystä.
    5. Jos vastaavuutta ei löydy, palautetaan virheilmoitus #N/A.

    Regex poimia merkkijono kahden merkin välillä

    Kahden merkin väliin jäävän tekstin saamiseksi voit käyttää joko kaappausryhmää tai look-aroundia.

    Oletetaan, että haluat poimia sulkujen välissä olevan tekstin. Kaappausryhmä on helpoin tapa.

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

    Positiivisella lookbehind- ja lookahead-vaikutuksella tulos on täsmälleen sama.

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

    Huomioi, että kaappausryhmämme (.*?) suorittaa laiska haku kahden hakasulkeen välissä olevalle tekstille - ensimmäisestä [:stä ensimmäiseen ]:hen. Kytkentäryhmä ilman kysymysmerkkiä (.*) tekisi ahne haku ja tallentaa kaiken ensimmäisestä [ viimeiseen ].

    A2-kuvion avulla kaava on seuraava:

    =AblebitsRegexExtract(A5, $A$2)

    Miten saada kaikki ottelut

    Kuten jo mainittiin, AblebitsRegexExtract-funktio voi poimia vain yhden osuman. Kaikkien osumien saamiseksi voit käyttää aiemmin käsittelemäämme VBA-funktiota. On kuitenkin yksi varoitus - VBA RegExp ei tue ryhmien kaappaamista, joten yllä oleva kuvio palauttaa myös "rajamerkit", meidän tapauksessamme sulkeet.

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

    Jos haluat päästä eroon sulkeista, korvaa ne tyhjillä merkkijonoilla ("") käyttämällä tätä kaavaa:

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

    Paremman luettavuuden vuoksi käytämme erotinmerkkinä pilkkua.

    Regex poimia tekstiä kahden merkkijonon välistä

    Lähestymistapa, jonka olemme kehitelleet kahden merkin välissä olevan tekstin poimimiseen, toimii myös kahden merkkijonon välissä olevan tekstin poimimiseen.

    Jos haluat esimerkiksi saada kaiken "test 1" ja "test 2" väliltä, käytä seuraavaa säännöllistä lauseketta.

    Kuvio : testi 1(.*?)testi 2

    Täydellinen kaava on:

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

    Regex poimia verkkotunnuksen URL-osoitteesta

    Verkkotunnusten poimiminen URL-osoitteista ei ole helppoa edes säännöllisten lausekkeiden avulla. Avainelementti, joka tekee tempun, on ei-kiinnittyvät ryhmät. Lopullisesta tavoitteestasi riippuen valitse jokin alla olevista regexeistä.

    Saadaksesi täydellinen verkkotunnus mukaan lukien aliverkkotunnukset

    Kuvio : (?:https?\:

    Saadaksesi toisen tason verkkotunnus ilman alialueita

    Kuvio : (?:https?\:

    Katsotaan nyt, miten nämä säännölliset lausekkeet toimivat esimerkin "//www.mobile.ablebits.com" esimerkin URL-osoitteessa:

    • (?:https?\:
    • \/\/ - kaksi etuviivaa (molempia edeltää backslash, jotta etuviivan erikoismerkitys voidaan välttää ja tulkita kirjaimellisesti).
    • (?:[A-Za-z\d\-\.]{2,255}\.)? - ei-kapteenointiryhmä kolmannen tason, neljännen tason jne. verkkotunnusten tunnistamiseksi, jos sellaisia on ( mobiili Ensimmäisessä kuviossa se sijoitetaan isompaan kaappausryhmään, jotta kaikki tällaiset aliverkkotunnukset saadaan mukaan louhintaan. Aliverkkotunnus voi olla 2-255 merkin pituinen, mistä johtuu {2,255}-kvantifikaattori.
    • ([A-Za-z\d\-]{1,63}\.[A-Za-z]{2,24}) - kaappausryhmä toisen tason verkkotunnuksen erottamiseksi ( ablebits ) ja ylätason verkkotunnus ( com Toisen tason verkkotunnuksen enimmäispituus on 63 merkkiä. Pisin tällä hetkellä käytössä oleva ylimmän tason verkkotunnus sisältää 24 merkkiä.

    Riippuen siitä, mikä säännöllinen lauseke on syötetty A2-kenttään, alla oleva kaava tuottaa erilaisia tuloksia:

    =AblebitsRegexExtract(A5, $A$2)

    Regex poimia täydellinen verkkotunnus kaikkien aladomainien kanssa:

    Regex poimia toisen tason verkkotunnus ilman aliverkkotunnuksia:

    Näin voit poimia tekstin osia Excelistä säännöllisten lausekkeiden avulla. Kiitän sinua lukemisesta ja odotan innolla, että tapaamme blogissamme ensi viikolla!

    Saatavilla olevat lataukset

    Excel Regex Extract -esimerkkejä (.xlsm-tiedosto)

    Ultimate Suite -kokeiluversio (.exe-tiedosto)

    Michael Brown on omistautunut teknologian harrastaja, jolla on intohimo yksinkertaistaa monimutkaisia ​​prosesseja ohjelmistotyökalujen avulla. Yli vuosikymmenen kokemuksella teknologia-alalta hän on hionut taitojaan Microsoft Excelissä ja Outlookissa sekä Google Sheetsissä ja Docsissa. Michaelin blogi on omistettu jakamaan tietojaan ja asiantuntemustaan ​​muiden kanssa, ja se tarjoaa helposti seurattavia vinkkejä ja opetusohjelmia tuottavuuden ja tehokkuuden parantamiseksi. Olitpa kokenut ammattilainen tai aloittelija, Michaelin blogi tarjoaa arvokkaita oivalluksia ja käytännön neuvoja, joiden avulla saat kaiken irti näistä tärkeistä ohjelmistotyökaluista.