-
Notifications
You must be signed in to change notification settings - Fork 84
Regex I
Regular expression arba regex yra simbolių seka, kurios pagalba kuriame paieškos tekste šablonus. Ši technika nėra išskirtinai susijusi su Python ar kuria kita kalba. Tuo pačiu tai yra greičiausias būdas sutikrinti, ar suvesta informacija atitinka standartus (pvz. email), surasti kažkokias atkarpas tekste ir pan pobūdžio užduotims vykdyti.
pythex.org - svetainė, kurioje galima praktikuotis, tikrinti savo regex šablonus. Pvz. įvedus vieną raidę a, regex išgaudo visas raides tikrinamame tekste.
Testinis tekstas:
Tarptautinės oro transporto asociacijos statistika rodo, kad vis daugėja incidentų, susijusių su nepaklusniais lėktuvo keleiviais. Naujausi turimi duomenys (2017 m.) rodo, kad nutinka vidutiniškai po vieną tokį įvykį per 1 053 skrydžius. 2016 metų duomenys pranešė apie vieną įvykį per 1 344 skrydžius.
įvedus žodį rodo, surandami visi žodžiai 'rodo':
regex'as turi savo sintaksę, kurios pagalba galime apsibrėžti pačias įvairiausias paieškos tekste užklausas.
- \d skaičius
- \D neskaičius
- \s tuščias tarpas (whitespace) [ \t\n\r\f\v] (space, tab, newline, ir pan.)
- \S ne tuščias tarpas - viskas, kas ne tarpas.
- \w alphanumeric: [0-9a-zA-Z_] - skaičiai nuo 0 iki 9, didžiosios ir mažosios raidės A-Z, simbolis '_'. UTF simboliai nėra alphanumeric.
- \W viskas, kas nėra prieš tai išvardintame punkte.
- . bet koks simbolis išskyrus eilutės pabaigos simbolį
pabandykime tiesiog įvesti \w:
Rezultate matome, kad išrinktos visos alphanumeric reikšmės. Deja, UTF-8 simboliai nepakliūna į šią kategoriją, todėl lietuviškos raidės neišgaudytos. Vėliau aptarsime, kaip šitą problemą apeiti. Tarpus galime išrankioti su \s, skaičius su \d. Jeigu norime išgaudyti ir tarpus ir skaičius, naudojame loginį 'arba' simbolį '|':
svarbi regex sintaksės dalis yra vadinami Quantifiers. Jų pagalba šablone nustatome, kiek kartų simbolis atsikartoja šablone:
- + Vieną ar daugiau kartų
- {x} Lygiai x kartų
- {x,y} Nuo x iki y kartų
- {x,} x arba daugiau kartų
- * Nulį ar daugiau kartų
- ? kartą, arba nei karto (optional)
Tarkime, iš duoto teksto norime ištraukti '(2017 m.)':
- Panagrinėkime - ( ištraukia skliaustelį, kadangi skliaustelis regex'o sintaksėje turi paskirtį, prieš jį naudojame escape simbolį '\'.
- Toliau turim \d+. Reiškia skaičius gali atsikartoti vieną ir daugiau kartų.
- Paskui eina tarpas - \s.
- raidei m pagauti panaudojome \w.
- '.)' kombinacija yra du NE alphanumerical simboliai, tiesiog panaudojome \W{2}
Turėkite omenyje, kad nėra vieno varianto šiai užduočiai atlikti, galime naudoti, pvz. \W\d{4}\s?m\W{1,2}. Arba tiesiog \(2017 m\.\). Viskas priklauso nuo to ar ieškome daugiau šablono (pattern), ar konkrečios atkarpos.
Arba, tarkime mums prireikė visų keturženklių skaičių. Atkreipkite dėmesį, metai užrašomi be tarpo, pvz. 2017, o kiti keturženkliai su pvz. 1 034.
Laužtiniai skliaustai naudojami simbolių, kurie priklauso juose nurodytai grupei, paieškai. Tarkime [A-Za-z0-9] išrinks didžiąsias raides, mažąsias raides ir skaičius nuo 0 iki 9. [ąčęėįšųūž] išrankios lietuviškas raides, o, pvz, [\wąčęėįšųūž]+ išrinks visus žodžius ir skaičius lietuviškame tekste. (iš tiesų, Python'e paprasčiau su unicode simboliais, o šiame puslapyje geriau su angliškais tekstais praktikuotis).
Dar šiek tiek sintaksės:
- ^ - ieško šablono tik iš eilutės pradžios (* Naudojamas laužtiniuose skliaustuose turi reikšmę NOT)
- $ - ieško šablono tik iš eilutės pabaigos
- \b - žodžio ribos simbolis
Pvz.:
Šiuo atveju mūsų regex'as pasigauna abudu keturženklius. Jeigu mes norėtumėm, kad pasigautų tik pirmąjį, kuris nesiriboja su kitais simboliais, prieš ir po naudotumėm \b:
Jeigu mums prireiktų atkarpos 'blablabla', tai tiesiog suvedus tai į šabloną, mums išrinks visas blablabla. Tačiau, prireikus tokios, kuri nesiriboja su jokiais kitais žodžiais, reikia daryti taip:
Jeigu mus domina žodis, kuriuo prasideda eilutė, rašome taip:
O simbolių kombinacijas eilutės pabaigoje išrenkame taip:
Paskutinė sintaksės porcija:
- | - loginis 'arba'
- () - grupavimas
Pvz.:
Panagrinėkime šabloną (Mr.|Mrs.)\s([A-Z\w]+\s[A-Z\w]+):
- (Mr.|Mrs.) - ieško Mr. ARBA Mrs. Vienas iš dviejų.
- \s - tarpas
- ([A-Z]\w+\s[A-Z]\w+) - Ieško dviejų žodžių, prasidedančių didžiąja raide, atskirtų vienu tarpu.
paveikslėlyje atkreipkite dėmesį į Match Captures skiltį. Matome, kad rezultatas išskirstytas į grupes, t.y. 1. kreipinys 2. Vardas Pavardė, nes jos išskirtos skliausteliuose. Programuojant Python aplinkoje galėsime skirstyti užklausos rezultatus pagal grupes.
© Donatas Noreika ir Jotautas Treigys
Dekoratoriai
Iteratoriai ir generatoriai
RegEx
Pillow
NumPy
Pandas
- Pandas I
- Užduotys I
- Atsakymai I
- Pandas II
- Užduotys II
- Atsakymai II
- Pandas III
- Užduotys III
- Atsakymai III
Seaborn
Mašininis mokymasis
- 1 Tiesinės regresijos modelis
- 1 Užduotis
- 1 Atsakymas
- 2 Modeliai - klasifikatoriai
- 2 Užduotis
- 2 Atsakymas
- 3 Modeliai praktikoje
- 3 Užduotis (atnaujinta), atsakymas
- 3 Užduotis
- 3 Atsakymas (kodas su komentarais)
Requests, JSON, API
Web Scraping (Beautiful Soup)
Duomenų bazės
- SQL 1
- Užduotys
- Atsakymai
- SQL 2
- Užduotys
- Atsakymai
- SQL 3
- Užduotys
- Atsakymai
- SQL 4
- Užduotis
- SQL per Python
- Užduotis
- ORM 1
- Užduotys
- ORM 2
- Užduotis
- Atsakymas
Flask
- Įžanga
- Užduotys
- I dalis
- Užduotis
- I dalies kodas (atsakymas)
- II dalis
- Užduotis
- Atsakymas (kodas)
- III dalis
- Užduotis
- Atsakymas
- IV dalis
- Užduotis
- Atsakymas
- Flask Many2one, CRUD
- Flask One2many, many2many CRUD
- Flask: REST API kūrimas
- Flask: API su One2many (kodas)
- Flask: vartotojai
- Flask: nuotraukos pridėjimas, admin puslapis, puslapiavimas
- Flask: password reset, error pages
- Flask: projekto sutvarkymas
- Flask diegimas į serverį
Django
- 1. Įžanga, Modeliai
- 2. Administratoriaus svetainė
- 3. Šablonai
- 4. Views
- 5. Puslapiavimas, Paieška, Nuotraukos
- 6. Autorizacija
- 7. Vartotojai II, HTML laukai
- 8. Registracija, Formos
- 9. Vartotojo profilis
- 10. Create, Update, Delete rodinių klasės
- 11. Vertimai
- Užduotis: Autoservisas
- Biblioteka: kodas iki 6-tos dalies
- Biblioteka: kodas nuo 6-tos dalies
- Django diegimas į serverį
- Django diegimas į serverį 2
Django REST
Odoo
- Kurso programa: projektų valdymas
- 1 pamoka
- 2 pamoka
- 3 pamoka
- 4 pamoka
- 5 pamoka
- 6 pamoka
- 7 pamoka
- 8 pamoka
- 9 pamoka
Linux