Turinys
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:
- Reguliarias išraiškas galite naudoti įprastuose .xlsx sąsiuviniuose nepridėdami jokio VBA kodo ir neįrašydami jų kaip makrokomandų failų.
- .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:
- Dėl Ablebitų duomenys skirtuke Tekstas grupę, spustelėkite "Regex" įrankiai .
- 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:
- Spustelėkite fx mygtuką formulės juostoje arba Įterpimo funkcija apie Formulės skirtukas.
- Į Įterpimo funkcija dialogo lange pasirinkite AblebitsUDFs kategoriją, pasirinkite dominančią funkciją ir spustelėkite Gerai.
- 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)