"Excel RegEx" pavyzdžiai: reguliariųjų išraiškų naudojimas formulėse

  • Pasidalinti
Michael Brown

Niekada negalėjote suprasti, kodėl "Excel" formulėse nepalaikomos reguliariosios išraiškos? Dabar jos palaikomos :) Naudodamiesi mūsų pasirinktinėmis funkcijomis galite lengvai surasti, pakeisti, išskirti ir pašalinti tam tikrą šabloną atitinkančias eilutes.

Iš pirmo žvilgsnio "Excel" turi viską, ko gali prireikti teksto eilutėms tvarkyti. Hmm... o kaip dėl reguliariųjų išraiškų? Oi, "Excel" nėra integruotų "Regex" funkcijų. Bet niekas nesako, kad negalime sukurti savų :)

    Kas yra reguliarioji išraiška?

    Reguliarioji išraiška (dar žinoma kaip regex arba regexp ) yra specialiai užkoduota simbolių seka, apibrėžianti paieškos šabloną. Naudodamiesi šiuo šablonu, galite rasti atitinkančią simbolių kombinaciją eilutėje arba patvirtinti įvestus duomenis. Jei esate susipažinę su pakaitinių simbolių užrašu, regeksus galite laikyti išplėstine pakaitinių simbolių versija.

    Reguliariosios išraiškos turi savo sintaksę, kurią sudaro specialieji simboliai, operatoriai ir konstrukcijos. Pavyzdžiui, [0-5] atitinka bet kurį vieną skaitmenį nuo 0 iki 5.

    Reguliarios išraiškos naudojamos daugelyje programavimo kalbų, įskaitant "JavaScript" ir VBA. Pastaroji turi specialų objektą RegExp, kurį naudosime savo pasirinktinėms funkcijoms kurti.

    Ar "Excel" palaiko regex?

    Deja, "Excel" programoje nėra integruotų "Regex" funkcijų. Kad galėtumėte naudoti reguliarias išraiškas formulėse, turėsite sukurti savo vartotojo apibrėžtą funkciją (VBA arba .NET pagrindu) arba įdiegti trečiųjų šalių įrankius, palaikančius regeksus.

    "Excel" "Regex" suktukas

    Nesvarbu, ar regex šablonas yra labai paprastas, ar itin sudėtingas, jis kuriamas naudojant bendrą sintaksę. Šios mokomosios programos tikslas nėra išmokyti taisyklingųjų išraiškų. Tam yra daugybė šaltinių internete - nuo nemokamų vadovėlių pradedantiesiems iki aukščiausios kokybės kursų pažengusiems naudotojams.

    Toliau pateikiame trumpą nuorodą į pagrindinius RegEx modelius, kuri padės jums suvokti pagrindus. Ji taip pat gali būti naudojama kaip suvestinė studijuojant tolesnius pavyzdžius.

    Jei esate gerai įvaldę reguliarias išraiškas, galite iš karto pereiti prie "RegExp" funkcijų.

    Personažai

    Tai dažniausiai naudojami šablonai, skirti tam tikriems simboliams suderinti.

    Modelis Aprašymas Pavyzdys Rungtynės
    . Pakaitinis simbolis: atitinka bet kurį atskirą simbolį, išskyrus eilutės pertrauką .ot taškas , karštas , puodas , @ot
    \d Skaitmens simbolis: bet kuris vienas skaitmuo nuo 0 iki 9 \d Svetainėje a1b , rungtynės 1
    \D Bet koks simbolis, kuris NĖRA skaitmuo \D Svetainėje a1b , rungtynės a ir b
    \s Baltasis simbolis: tarpas, skirtukas, nauja eilutė ir grįžtamasis simbolis .\s. Svetainėje 3 centai , rungtynės 3 c
    \S Bet koks ne baltasis simbolis \S+ Svetainėje 30 centų , rungtynės 30 ir centų
    \w Žodžio simbolis: bet kuri ASCII raidė, skaitmuo arba pabraukimas. \w+ Svetainėje 5_kačių*** , rungtynės 5_cats
    \W Bet koks simbolis, kuris NĖRA raidinis-skaitmeninis simbolis arba pabraukimas \W+ Svetainėje 5_kačių*** , rungtynės ***
    \t Skirtukas
    \n Nauja linija \n\d+ Toliau pateiktoje dviejų eilučių eilutėje atitinka 10

    5 katės

    10 šunų

    \ Išsisaugo specialią simbolio reikšmę, kad galėtumėte jo ieškoti \.

    \w+\.

    Pabėga nuo taško, kad eilutėje galėtumėte rasti tiesioginį "." simbolį

    Mr. , Ponia. , Prof.

    Personažų klasės

    Naudodami šiuos šablonus galite suderinti skirtingų simbolių rinkinių elementus.

    Modelis Aprašymas Pavyzdys Rungtynės
    [simboliai] Atitinka bet kurį vieną skliaustuose esantį simbolį d[oi]g šuo ir iškasti
    [^žymenys] Rungiasi su bet kokiu vienu ženklu, kuris nėra skliausteliuose d[^oi]g Rungtynės dag, dug , d1g

    Neatitinka šuo ir iškasti

    [nuo-iki] Atitinka bet kurį tarp skliaustų esantį simbolį [0-9]

    [a-z]

    [A-Z]

    Bet kuris vienas skaitmuo nuo 0 iki 9

    Bet kuri viena mažoji raidė

    Bet kuri viena didžioji raidė

    Kiekybiniai žodžiai

    Kvantifikatoriai yra specialios išraiškos, nurodančios simbolių, kuriuos reikia suderinti, skaičių. Kvantifikatorius visada taikomas prieš jį esančiam simboliui.

    Modelis Aprašymas Pavyzdys Rungtynės
    * Nulis ar daugiau atvejų 1a* 1, 1a , 1aa, 1aaa, 1aaa ir t. t.
    + Vienas ar daugiau atvejų po+ Svetainėje puodas , rungtynės po

    Svetainėje prasta , rungtynės kakoti

    ? Nulis arba vienas atvejis roa?d kelias, lazda
    *? Nulis ar daugiau atvejų, bet kuo mažiau. 1a*? Svetainėje 1a , 1aa ir 1aaa , rungtynės 1a
    +? Vienas ar daugiau atvejų, bet kuo mažiau. po+? Svetainėje puodas ir prasta , rungtynės po
    ?? Nulis arba vienas atvejis, bet kuo mažiau. roa?? Svetainėje kelias ir lazda , rungtynės ro
    {n} Atitinka ankstesnį šabloną n kartų \d{3} Lygiai 3 skaitmenys
    {n,} Atitinka ankstesnį šabloną n ar daugiau kartų \d{3,} 3 ar daugiau skaitmenų
    {n,m} Atitinka ankstesnį šabloną nuo n iki m kartų \d{3,5} Nuo 3 iki 5 skaitmenų

    Grupavimas

    Grupavimo konstrukcijos naudojamos šaltinio eilutės pojuosčiui užfiksuoti, kad su juo būtų galima atlikti tam tikrą operaciją.

    Sintaksė Aprašymas Pavyzdys Rungtynės
    (modelis) Užfiksuoti grupę: užfiksuoja atitinkančią eilutę ir priskiria jai eilės numerį. (\d+) Svetainėje 5 katės ir 10 šunų , užfiksuoja 5 (1 grupė) ir 10 (2 grupė)
    (?:pattern) Nefiksuojanti grupė: atitinka grupę, bet jos nefiksuoja. (\d+)(?: šunys) Svetainėje 5 katės ir 10 šunų , užfiksuoja 10
    \1 1 grupės turinys (\d+)\+(\d+)=\2\+\1 Rungtynės 5+10=10+5 ir užfiksuoja 5 ir 10 , kurie yra užfiksuoti grupėse
    \2 2 grupės turinys

    Inkarai

    Inkarai nurodo vietą įvesties eilutėje, kurioje reikia ieškoti atitikmens.

    Inkaras Aprašymas Pavyzdys Rungtynės
    ^ Eilutės pradžia

    Pastaba: [^skliausteliuose] reiškia "ne"

    ^\d+ Bet koks skaitmenų skaičius eilutės pradžioje.

    Svetainėje 5 katės ir 10 šunų , rungtynės 5

    $ Eilutės pabaiga \d+$ Bet koks skaitmenų skaičius eilutės pabaigoje.

    Svetainėje 10 plius 5 - 15 , rungtynės 15

    \b Žodžio riba \bjoy\b Rungtynės joy kaip atskiras žodis, bet ne malonus .
    \B NE žodžio riba \Bjoy\B Rungtynės joy svetainėje malonus , bet ne kaip atskiras žodis.

    Pakaitos (OR) konstrukcija

    Pakaitos operandas įjungia OR logiką, todėl galite suderinti arba šį, arba tą elementą.

    Konstruoti Aprašymas Pavyzdys Rungtynės
    Atitinka bet kurį atskirą elementą, atskirtą vertikaliu brūkšniu (s Svetainėje ji pardavinėja kriaukles, rungtynės parduoda ir kriauklės

    Apžvalgos

    Apžvalgos konstrukcijos naudingos, kai norite sutapatinti kažką, po ko seka arba prieš ką nors kitą. Šios išraiškos kartais vadinamos "nulinio pločio teiginiais" arba "nulinio pločio atitikmenimis", nes jos atitinka poziciją, o ne tikruosius simbolius.

    Pastaba. VBA RegEx versijoje išvaizdos nuorodos nepalaikomos.

    Modelis Aprašymas Pavyzdys Rungtynės
    (?=) Teigiama ateities perspektyva X(?=Y) Atitinka išraišką X, kai po jos eina Y (t. y. jei prieš X yra Y).
    (?!) Neigiama perspektyva X(?!Y) Atitinka išraišką X, jei po jos NĖRA išraiškos Y
    (?<=) Teigiamas žvilgsnis į praeitį (?<=Y)X Atitinka išraišką X, kai prieš ją eina Y (t. y. jei už X yra Y).
    (? )</td Neigiamas žvilgsnis į praeitį (? Y)X</td Atitinka išraišką X, kai prieš ją NĖRA išraiškos Y

    Dabar, kai žinote pagrindinius dalykus, pereikime prie įdomiausios dalies - regeksų naudojimo realiuose duomenyse eilutėms analizuoti ir reikiamai informacijai rasti. Jei reikia daugiau informacijos apie sintaksę, gali būti naudingas "Microsoft" vadovas apie reguliariųjų išraiškų kalbą.

    "Excel" pasirinktinės "RegEx" funkcijos

    Kaip jau minėta, "Microsoft Excel" neturi integruotų "RegEx" funkcijų. Norėdami įjungti reguliariąsias išraiškas, sukūrėme tris pasirinktines VBA funkcijas (dar vadinamas vartotojo apibrėžtomis funkcijomis). Galite nukopijuoti kodus iš toliau nurodytų puslapių arba iš mūsų pavyzdinės darbo knygos ir tada įklijuoti į savo "Excel" failus.

    Kaip veikia VBA "RegExp" funkcijos

    Šiame skyriuje paaiškinama vidinė mechanika ir jis gali būti įdomus tiems, kurie nori tiksliai žinoti, kas vyksta galinėje dalyje.

    Norėdami pradėti naudoti reguliariąsias išraiškas VBA, turite arba aktyvuoti RegEx objektų nuorodų biblioteką, arba naudoti funkciją CreateObject. Kad nereikėtų vargti nustatant nuorodą VBA redaktoriuje, pasirinkome pastarąjį būdą.

    "RegExp" objektas turi 4 savybes:

    • Modelis - yra modelis atitiktų įvesties eilutę.
    • Pasaulinis - kontroliuoja, ar įvesties eilutėje rasti visus atitikmenis, ar tik pirmąjį. Mūsų funkcijose jis nustatomas į True, kad gautume visos rungtynės .
    • MultiLine - lemia, ar šablonas turi būti ieškomas per eilučių pertraukas daugiajuostėse eilutėse, ar tik pirmoje eilutėje. Mūsų koduose jis nustatytas į True, kad būtų ieškoma kiekvienoje eilutėje .
    • IgnoreCase - apibrėžia, ar reguliarioji išraiška yra jautri didžiosioms ir mažosioms raidėms (numatytoji reikšmė), ar nejautri didžiosioms ir mažosioms raidėms (nustatyta į True). match_case parametras. Pagal numatytuosius nustatymus visos funkcijos yra , kai atsižvelgiama į mažąsias ir didžiąsias raides. .

    VBA RegExp apribojimai

    "Excel VBA" įgyvendina pagrindinius regex šablonus, tačiau joje trūksta daugelio pažangių funkcijų, kurias turi .NET, "Perl", "Java" ir kiti regex varikliai. Pavyzdžiui, VBA RegExp nepalaiko eilutės modifikatorių, tokių kaip (?i), kai reikia parinkti pagal didžiąją raidę, arba (?m), kai reikia parinkti kelių eilučių režimą, išvaizdos nuorodų, POSIX klasių ir kt.

    "Excel Regex" atitikimo funkcija

    Svetainė RegExpMatch funkcija ieško įvesties eilutėje teksto, atitinkančio reguliariąją išraišką, ir grąžina TRUE, jei randamas atitikmuo, o priešingu atveju - FALSE.

    RegExpMatch(tekstas, šablonas, [match_case])

    Kur:

    • Tekstas (privaloma) - viena ar kelios eilutės, pagal kurias bus ieškoma.
    • Modelis (privaloma) - reguliarioji išraiška, kurią reikia suderinti.
    • Match_case (neprivaloma) - atitikimo tipas. TRUE arba praleista - jautrus didžiosioms raidėms; FALSE - nejautrus didžiosioms raidėms.

    Funkcijos kodas pateikiamas čia.

    Pavyzdys: kaip naudoti reguliarias išraiškas eilutėms suderinti

    Tarkime, kad toliau pateiktame duomenų rinkinyje norite nustatyti įrašus, kuriuose yra SKU kodai.

    Atsižvelgiant į tai, kad kiekvienas SKU prasideda 2 didžiosiomis raidėmis, po jų eina brūkšnys, o po jo - 4 skaitmenys, galite juos suderinti naudodami šią išraišką.

    Modelis : \b[A-Z]{2}-\d{4}\b

    Kur [A-Z]{2} reiškia bet kurias 2 didžiąsias raides nuo A iki Z, o \d{4} - bet kuriuos 4 skaitmenis nuo 0 iki 9. Žodžio riba \b rodo, kad SKU yra atskiras žodis, o ne didesnės eilutės dalis.

    Sukūrę šabloną, pradėkite rašyti formulę kaip įprastai, ir funkcijos pavadinimas pasirodys "Excel" automatinės užbaigimo funkcijos siūlomame sąraše:

    Darant prielaidą, kad pradinė eilutė yra A5, formulė yra tokia:

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Kad būtų patogiau, reguliariosios išraiškos reikšmę galite įvesti į atskirą langelį ir naudoti absoliučią nuorodą ($A$2). modelis argumentas. Taip užtikrinama, kad kopijuojant formulę į kitas ląsteles ląstelės adresas išliks nepakitęs:

    =RegExpMatch(A5, $A$2)

    Norėdami vietoj TRUE ir FALSE rodyti savo tekstines etiketes, įterpkite "RegExpMatch" į funkciją IF ir nurodykite norimus tekstus funkcijos value_if_true ir value_if_false argumentai:

    =IF(RegExpMatch(A5, $A$2), "Taip", "Ne")

    Daugiau formulės pavyzdžių rasite:

    • Kaip suderinti eilutes naudojant reguliarias išraiškas
    • "Excel" duomenų tvirtinimas naudojant regeksus

    "Excel Regex" išskyrimo funkcija

    Svetainė RegExpExtract funkcija ieško posistemių, atitinkančių reguliariąją išraišką, ir ištraukia visus atitikmenis arba konkretų atitikmenį.

    RegExpExtract(tekstas, šablonas, [instance_num], [match_case])

    Kur:

    • Tekstas (privaloma) - teksto eilutė, pagal kurią bus ieškoma.
    • Modelis (privaloma) - reguliarioji išraiška, kurią reikia suderinti.
    • Instance_num (neprivaloma) - serijos numeris, nurodantis, kurį egzempliorių išskirti. Jei praleista, grąžinami visi rasti atitikmenys (numatytoji reikšmė).
    • Match_case (neprivaloma) - apibrėžia, ar teksto raidės turi atitikti (TRUE arba praleista), ar ignoruoti (FALSE).

    Funkcijos kodą galite rasti čia.

    Pavyzdys: kaip išgauti eilutes naudojant reguliariąsias išraiškas

    Toliau tęsdami pavyzdį, išskirkime sąskaitų faktūrų numerius. Tam naudosime labai paprastą regeksą, kuris atitinka bet kurį 7 skaitmenų skaičių:

    Modelis : \b\d{7}\b

    Įdėkite raštą į A2 ir atliksite darbą su šia kompaktiška ir elegantiška formule:

    =RegExpExtract(A5, $A$2)

    Jei šablonas sutampa, formulėje išvedamas sąskaitos faktūros numeris, o jei šablonas nesutampa - nieko negrąžinama.

    Daugiau pavyzdžių žr.: Kaip išgauti eilutes "Excel" programoje naudojant regex.

    "Excel" "Regex" pakeitimo funkcija

    Svetainė RegExpReplace funkcija pakeičia regex atitinkančias reikšmes nurodytu tekstu.

    RegExpReplace(tekstas, šablonas, pakeitimas, [instance_num], [match_case])

    Kur:

    • Tekstas (privaloma) - teksto eilutė, pagal kurią bus ieškoma.
    • Modelis (privaloma) - reguliarioji išraiška, kurią reikia suderinti.
    • Pakaitinis (privaloma) - tekstas, kuriuo bus pakeistos atitinkančios posistemės.
    • Instance_num (neprivaloma) - egzempliorius, kurį reikia pakeisti. Numatytoji reikšmė yra "visi atitikmenys".
    • Match_case (neprivaloma) - kontroliuoja, ar teksto raidės turi būti suderintos (TRUE arba praleistos), ar ignoruojamos (FALSE).

    Funkcijos kodą galite rasti čia.

    Pavyzdys: kaip pakeisti arba pašalinti eilutes naudojant regeksus

    Kai kuriuose mūsų įrašuose yra kredito kortelių numeriai. Ši informacija yra konfidenciali, todėl galbūt norėsite ją kuo nors pakeisti arba visiškai ištrinti. Abi užduotis galite atlikti naudodamiesi RegExpReplace Kaip? Antrame scenarijuje pakeisime tuščia eilute.

    Mūsų pavyzdinėje lentelėje visi kortelių numeriai turi 16 skaitmenų, kurie užrašyti 4 grupėmis, atskirtomis tarpais. Norėdami juos rasti, pakartojame šabloną naudodami šią reguliariąją išraišką:

    Modelis : \b\d{4} \d{4} \d{4} \d{4} \d{4}\b

    Pakeitimui naudojama ši eilutė:

    Pakaitinis : XXXX XXXX XXXX XXXX XXXX

    Čia pateikiama išsami formulė, pagal kurią pakeisti kredito kortelių numerius su neskelbtina informacija:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX XXXX XXXX")

    Kai regex ir pakaitinis tekstas yra atskirose ląstelėse (A2 ir B2), formulė veikia taip pat gerai:

    "Excel" programoje "pašalinimas" yra tam tikras "pakeitimo" atvejis. Į pašalinti kredito kortelių numerius, tiesiog naudokite tuščią eilutę ("") kaip keitimas argumentas:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b", "")

    Patarimas. Norėdami pašalinti tuščias eilutes rezultatuose, galite naudoti kitą "RegExpReplace" funkciją, kaip parodyta šiame pavyzdyje: Kaip pašalinti tuščias eilutes naudojant regex.

    Daugiau informacijos žr:

    • Kaip pakeisti eilutes "Excel" programoje naudojant regex
    • Kaip pašalinti eilutes naudojant regex
    • Kaip pašalinti baltąsias eilutes naudojant regexes

    "Regex" įrankiai, skirti atitikčiai, išskyrimui, pakeitimui ir posistemių pašalinimui

    Mūsų "Ultimate Suite" naudotojai gali naudotis visomis reguliariųjų išraiškų galimybėmis neįterpdami nė vienos kodo eilutės į savo darbaknyges. Visą reikiamą kodą parašė mūsų kūrėjai ir įdiegimo metu jis sklandžiai integruojamas į "Excel".

    Skirtingai nuo pirmiau aptartų VBA funkcijų, "Ultimate Suite" funkcijos yra pagrįstos .NET, o tai suteikia du pagrindinius privalumus:

    1. Reguliarias išraiškas galite naudoti įprastuose .xlsx sąsiuviniuose nepridėdami jokio VBA kodo ir neįrašydami jų kaip makrokomandų failų.
    2. .NET "Regex" variklis palaiko visas klasikinių reguliariųjų išraiškų funkcijas, todėl galite kurti sudėtingesnius šablonus.

    Kaip naudoti "Regex" programoje "Excel

    Įdiegus "Ultimate Suite", naudoti reguliarias išraiškas "Excel" programoje paprasta atlikti šiuos du veiksmus:

    1. Dėl Ablebitų duomenys skirtuke Tekstas grupę, spustelėkite "Regex" įrankiai .

    2. Dėl "Regex" įrankiai lange atlikite šiuos veiksmus:
      • Pasirinkite šaltinio duomenis.
      • Įveskite regex šabloną.
      • Pasirinkite norimą parinktį: Rungtynės , Ištrauka , Pašalinti arba Pakeisti .
      • Norėdami gauti rezultatą kaip formulę, o ne kaip vertę, pasirinkite Įterpti kaip formulę žymimasis langelis.
      • Paspauskite veiksmo mygtuką.

      Pavyzdžiui, norėdami pašalinti kredito kortelių numerius iš langelių A2:A6, nustatome šiuos parametrus:

    Tris kartus "AblebitsRegex" funkcija bus įterpta į naują stulpelį, esantį pradinių duomenų dešinėje. Mūsų atveju formulė yra tokia:

    =AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4} \d{4}\b")

    Sukūrę formulę, galite ją redaguoti, kopijuoti ar perkelti, kaip ir bet kurią kitą formulę.

    Kaip įterpti "Regex" formulę tiesiai į ląstelę

    AblebitsRegex funkcijas taip pat galima įterpti tiesiai į ląstelę nenaudojant priedo sąsajos. Štai kaip:

    1. Spustelėkite fx mygtuką formulės juostoje arba Įterpimo funkcija apie Formulės skirtukas.
    2. Į Įterpimo funkcija dialogo lange pasirinkite AblebitsUDFs kategoriją, pasirinkite dominančią funkciją ir spustelėkite Gerai.

    3. Apibrėžkite funkcijos argumentus kaip įprastai ir spustelėkite OK. Atlikta!

    Daugiau informacijos rasite "Regex Tools for Excel".

    Štai kaip naudoti reguliarias išraiškas, kad "Excel" ląstelėse atitiktų, ištrauktų, pakeistų ir pašalintų tekstą. Dėkoju, kad perskaitėte, ir laukiu jūsų kitą savaitę mūsų tinklaraštyje!

    Galimi atsisiuntimai

    "Excel Regex" - formulių pavyzdžiai (.xlsm failas)

    "Ultimate Suite" - bandomoji versija (.exe failas)

    Michaelas Brownas yra atsidavęs technologijų entuziastas, mėgstantis supaprastinti sudėtingus procesus naudojant programinės įrangos įrankius. Turėdamas daugiau nei dešimtmetį patirtį technologijų pramonėje, jis patobulino savo įgūdžius „Microsoft Excel“ ir „Outlook“, taip pat „Google“ skaičiuoklėse ir dokumentuose. Michaelio tinklaraštis skirtas dalytis savo žiniomis ir patirtimi su kitais, jame pateikiami lengvai įgyvendinami patarimai ir vadovėliai, kaip pagerinti produktyvumą ir efektyvumą. Nesvarbu, ar esate patyręs profesionalas, ar pradedantysis, Michaelo tinklaraštyje rasite vertingų įžvalgų ir praktinių patarimų, kaip išnaudoti visas šių pagrindinių programinės įrangos įrankių galimybes.