Jos olet ohjelmoija, on todennäköistä, että tiedät jo säännölliset lausekkeet (regex). Regex-mallit on toteutettu melkein kaikilla valtavirran ohjelmointikielillä, mutta silti useimmat kehittäjät eivät tunnista näiden mallien tehoa ja monipuolisuutta.
Tämä opas koskee säännöllisiä lausekkeita ja miten niitä voidaan käyttää Python-ohjelmointikielellä.
Mitä ovat säännölliset lausekkeet?
Säännölliset lausekkeet ovat malleja, jotka auttavat käyttäjää yhdistämään tekstitiedostojen ja merkkijonojen merkkiyhdistelmät. Voit käyttää säännöllisiä lausekkeita suodataksesi tai etsimällä tietyn mallin komennon tai asiakirjan lähdöstä.
Säännöllisiä lausekkeita on useita, joista tunnetuin on grep-komento Linuxissa. Muita sovelluksia ovat tietojen suodatus, kuten sähköpostiosoitteiden ja puhelinnumeroiden purkaminen datahakemistosta.
Tärkein syy siihen, miksi monet kehittäjät eroavat säännöllisistä lausekkeista, on tietämättömyys mallien sovituksen voimasta. Jotkut jopa pitävät säännöllisiä lausekkeita hämmentävinä kuvioissa käytettyjen merkkien ja sekvenssien suuren määrän vuoksi.
Mistä syystä tahansa voi olla, säännölliset lausekkeet ovat ja tulevat olemaan yksi tärkeimmistä ohjelmoinnin osa-alueista, joista kaikkien tulisi tietää.
Säännölliset lausekkeet: vastaavat merkit ja sekvenssit
Regex on itsessään aivan uusi kieli. Regex-moottori tulkitsee kuvioita, jotka koostuvat useista merkeistä, jotka on varustettu erityisillä merkityksillä. Perus literaalit, kuten aakkosnumeeriset merkit, sopivat yhteen. Mutta monimutkaiset merkit, kuten $, *, +, {jne. tuki korkeamman asteen sovituksessa.
- Tähti (*): Vastaa edellistä merkkiä nollaan tai useammin. Merkin kirjaimellinen merkitys olisi "Elementti kerrottuna n kertaa". Esimerkiksi, jos säännöllinen lauseke on abc *, merkkijonot ovat ab, abc, abcc, abccc, abcccc jne. Ilmaisu [bc] * vastaa bc, bcbc, bcbc jne.
- Plus (+): Yhdistää edellisen merkin vähintään kerran. Toiminta + merkki on samanlainen kuin *, mutta + merkki jättää mallin, jos merkkiä ei esiinny. Esimerkiksi, abc + vastaa abc, abcc, abccc jne. mutta ei ab.
- Kysymysmerkki (?): Vastaa edellistä merkkiä nolla tai yksi kerta. Esimerkiksi kuvio abc? vastaa vain ab: ta ja abc: tä.
- Putki (|): Käytetään binaarisena TAI operaattori. Vastaa jompaa kumpaa putkea edeltävästä ja seuraavasta merkistä. Esimerkiksi, a | b vastaa joko a tai b.
- Piste (.): Vastaa hahmoa, jonka henkilöllisyyttä ei tunneta. Esimerkiksi, a.c vastaa aac, abc, acc, a2c ja niin edelleen.
- Porkkana (^): Vastaa kuvion ensimmäistä merkkiä. Esimerkiksi, ^ Ra vastaa sanoja, jotka alkavat Ra kuten Rabbit, Raccoon ja Random.
- Dollari ($): Vastaa kuvion viimeistä merkkiä. Esimerkiksi, $ vastaa sanoja, jotka päättyvät an kuten Van, Dan ja Plan.
- Yhdysmerkki (-): Käytetään merkistöalueen määrittelemiseen. Esimerkiksi, [0-9] vastaa kaikkia yksinumeroisia numeromerkkejä.
Erityisiä sekvenssejä, joita käytetään säännöllisissä ilmentymismalleissa, ovat:
- \ A: Palauttaa vastaavuuden, jos seuraavat merkit ovat merkkijonon alussa. Esimerkiksi, \ Ahe vastaa sanoja, jotka alkavat kuten The, Them, They, jne.
- \ b: Palauttaa osuman, jos merkki löytyy joko sanan alusta tai lopusta. Esimerkiksi, \ bmad ja hullu \ b vastaa sanoja kuten tehty ja nomadi vastaavasti.
- \ B: Palauttaa osuman, jos merkkiä ei löydy sanan alusta tai lopusta.
- \ d: Vastaa merkkijonossa olevia numeerisia merkkejä. Esimerkiksi, /d* vastaa numeroita kuten 1, 12, 1232 jne.
- \ D: Vastaa merkkijonon ei-numeerisia merkkejä. / D vastaa a, b, c, f jne.
- \ s: Vastaa tekstin tyhjää merkkiä.
- \ S: Vastaa tekstiä, joka ei ole välilyönti.
- \ w: Palauttaa vastaavuuden, jos merkkijono sisältää aakkosnumeerisia merkkejä ja alaviivoja. Esimerkiksi, \ w vastaa a, b, c, d, 1, 2, 3 jne.
- \ W: Palauttaa vastaavuuden, jos merkkijono ei sisällä aakkosnumeerisia merkkejä tai alaviivoja.
- \ Z: Vastaa merkkejä merkkijonon lopussa. Esimerkiksi, loppu \ Z vastaa sanoja, jotka päättyvät loppuun kuten taivuttaa, korjata, taipua jne.
Python-menetelmät säännöllisille lausekkeille
Pythonissa re kirjasto tarjoaa kaikki tarvittavat toiminnot ja apuohjelmat, jotka tarvitaan regexin toteuttamiseen ohjelmissasi. Kirjastoa ei tarvitse ladata pipin avulla, koska se on esiasennettu Python-tulkin kanssa.
Tuoda re kirjasto Pythonissa, lisää seuraava koodi komentosarjaasi:
tuoda uudelleen
Huomaa, että välittäessämme säännöllisiä lausekkeita Pythonissa käytämme raakajonoja, koska ne eivät tulkitse erikoismerkkejä, kuten \ n ja \ t eri tavalla.
Ottelu()
täsmää uudelleen () method Pythonissa palauttaa regex-objektin, jos ohjelma löytää osuman määritetyn merkkijonon alusta. Tässä toiminnossa on kaksi perusargumenttia:
uudelleensovitus (kuvio, merkkijono)
...missä kuvio on säännöllinen lauseke ja merkkijono on teksti, jota on etsittävä.
Katso alla oleva koodinpätkä.
tuoda uudelleen
match = re.match (r'Word ', "Tämä lause sisältää sanan")
tulosta (ottelu)
r merkkijono ennen merkkijonoa tarkoittaa raakaa merkkijonoa.
Tuotos:
Ei mitään
Edellä mainittu koodi palaa Ei mitään koska Sana ei ollut läsnä merkkijonon alussa.
Jos osuma löytyy, voit tulostaa ottelun käyttämällä ryhmä() menetelmä, joka kuuluu regex-objektiin.
tuoda uudelleen
match = re.match (r'Word ', "Sanaa on vaikea lukea")
tulosta (match.group (0))
Tuotos:
Sana
Hae()
uudelleenhaku () menetelmä ottaa samanlaisia argumentteja kuin re.match (). Vaikka match () palauttaa vain merkkijonon alussa olevat ottelut, Hae() palauttaa merkkijonon mistä tahansa hakemistosta löydetyt ottelut.
tuoda uudelleen
match = re.search (r'Word ', "Tämä lause sisältää sanan. Sanaa on vaikea lukea. ")
tulosta (match.group (0))
Huomaa, että ottelu() ja Hae() metodit palauttavat vain yhden kuvion vastaavuuden. Edellä mainitussa koodissa Sana ilmestyy kahdesti. Mutta Hae() -toiminto vastaa vain sanan ensimmäistä esiintymistä.
Sana
Löydä kaikki ()
Kuten voit jo arvata, Löydä kaikki () method palauttaa merkkijonon kaikki mahdolliset osumat.
tuoda uudelleen
match = re.search (r'Word ', "Tämä lause sisältää sanan. Sanaa on vaikea lukea. ")
elemille ottelussa:
tulosta (elem)
Regex-objektin palauttamisen sijaan findall () -funktio palauttaa luettelon kaikista vastaavuuksista. Voit toistaa luettelon läpi käyttämällä a silmukalle pythonissa.
Jakaa()
Jos haluat jakaa merkkijonon alamerkkijonoihin käyttämällä mallia erottimena, niin jakaa() toiminto on yksi mitä tarvitset.
tuoda uudelleen
split = re.split (r'and ', "Tämä sana ja se ja tämä ovat erilaisia".)
tulosta (jaettu)
Tuotos:
['Tämä sana "," tuo "," nämä ovat erilaisia ".]
Sub()
sub() menetelmä antaa käyttäjän korvata tietyn sanan kuvion sijasta. Se esittää seuraavat perustelut.
re.sub (kuvio, korvaava, merkkijono)
Harkitse tätä koodinpätkää:
tuoda uudelleen
result = re.sub (r'and ',' tai ', "Dave ja Harry on rangaistava.")
tulosta (tulos)
Tuotos:
Dave tai Harry on rangaistava.
Koota()
re.compile () menetelmä re kirjaston avulla käyttäjä voi tallentaa kootun version säännöllisen lausekkeen mallista muistiin. Sitten käyttäjä voi käännetyn objektin avulla suodattaa määritetyn tekstin vedoksen vastaaville kuvioille.
tuoda uudelleen
kuvio = re.compile ('Python')
match = pattern.findall ("Python on loistava kieli komentosarjojen kirjoittamiseen. Python on helppo oppia. ")
tulosta (ottelu)
Tätä toimintoa käytetään ensisijaisesti sellaisten mallien säästämiseen, jotka ovat paljon resursseja kuluttavia ja joiden suorittaminen vaatii paljon aikaa. Kuvion kokoaminen ja tallentaminen objektina etukäteen ratkaisee tämän ongelman.
Hyödynnä Regexin tehoa Pythonilla
Kun työskentelet tekstitiedostojen ja tulostuksen kanssa, regex on loistava työkalu käytettävissänne. Voit kirjoittaa koodin nopeasti suodattamaan tai korvaamaan tietyt mallit asiakirjassa.
Kaikkien merkkien ja vastaavien sekvenssien muistaminen voi olla vaikeaa, jos olet vasta aloittamassa regexiä. Parempi säännöllisten lausekkeiden käyttö viittaamalla hahmojen, menetelmien ja sekvenssien luetteloon silloin tällöin auttaa sinua varmasti pitkällä aikavälillä.
Käytä tätä Pythonin säännöllisten lausekkeiden luetteloa, jotta voit paremmin käyttää tätä monipuolista ohjelmointikieliä.
Lue seuraava
- Ohjelmointi
- Ohjelmointi
- Python

Deepesh on MUO: n Linuxin nuorempi toimittaja. Hän on kirjoittanut informatiivista sisältöä Internetissä yli 3 vuotta. Vapaa-ajallaan hän nauttii kirjoittamisesta, musiikin kuuntelusta ja kitaransoitosta.
Tilaa uutiskirjeemme
Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia e-kirjoja ja erikoistarjouksia!
Vielä yksi askel !!!
Vahvista sähköpostiosoitteesi juuri lähettämässäsi sähköpostiviestissä.