Regexin täysi muoto on Regular Expression. Se on minkä tahansa ohjelmointikielen tärkeä ominaisuus. Se on merkkijonokuvio, jota käytetään vastaamaan, etsimään tai korvaamaan merkkijonoarvoja. Regex-mallia voidaan käyttää Python-skriptissä Pythonin 're'-moduulin avulla. Tässä moduulissa on monenlaisia toimintoja erilaisten merkkijonotoimintojen suorittamiseen. Erilaisia metamerkkejä ja erikoissarjoja käytetään määrittämään regex-kuvioita tehtävien etsimiseksi tai korvaamiseksi. Joidenkin yleisesti käytettyjen metamerkkien, erikoissekvenssien ja regex-menetelmien käyttötarkoitukset Python-komentosarjassa esitetään tässä opetusohjelmassa.
Joitakin yleisesti käytettyjä metamerkkejä regexissä:
Hahmot | Tarkoitus |
'+' | Sitä käytetään vastaamaan yhtä tai useampaa tietyn merkin esiintymää merkkijonossa. |
'*' | Sitä käytetään vastaamaan nollaa tai useampaa tietyn merkin esiintymää merkkijonossa. |
'?' | Sitä käytetään vastaamaan nollaa tai yhtä tiettyä merkkiä merkkijonossa. |
'^' | Sitä käytetään vastaamaan tiettyä merkkiä tai merkkijonoa merkkijonon alussa. |
'$' | Sitä käytetään vastaamaan tiettyä merkkiä tai merkkijonoa merkkijonon lopussa. |
'|' | Sitä käytetään vastaamaan mitä tahansa merkkijonon useista merkkijonoista. Se toimii kuten TAI-logiikka. |
'[]' | Sitä käytetään yhdistämään useita merkkejä. |
'{}' | Sitä käytetään täsmäämään tietty määrä merkkejä. |
Jotkut tavallisesti käytetyt erikoissekvenssit regexissä:
Jaksot | Tarkoitus |
'\A' | Sitä käytetään vastaamaan tiettyä merkkiä merkkijonon alussa. Se toimii kuten '^'-merkki. |
'\b', '\B' | Merkkiä '\b' käytetään vastaamaan merkkijonoa, joka sisältää tietyn merkin tai sanan merkkijonon alussa tai lopussa. '\B' toimii vastapäätä '\b'. |
'\d', '\D' | '\d' vastaa desimaalilukua merkkijonossa, joka on samanlainen kuin '[0-9]'. '\D' toimii vastapäätä '\d'. |
'\s', '\S' | '\s' vastaa välilyöntiä merkkijonossa, joka on samanlainen kuin '[\n\t\r\v]'. '\S' toimii vastapäätä '\s'. |
'\w', '\W' | '\w' -merkkiä käytetään vastaamaan merkkijonon aakkos- ja numeerisia merkkejä. '\W' toimii vastapäätä '\w'. |
'\KANSSA' | Sitä käytetään vastaamaan tiettyä merkkiä merkkijonon lopussa. Se toimii kuten '$'-merkki. |
Esimerkki 1: Sovi merkkijono Match()-funktiolla
Match()-funktiota käytetään sovittamaan säännöllinen lausekekuvio merkkijonon alussa. Tämän funktion syntaksi annetaan seuraavasti:
Syntaksi:
re.match ( kuvio, merkkijono, liput = 0 )
Tässä ensimmäistä argumenttia käytetään määrittämään säännöllinen lausekekuvio. Toista argumenttia käytetään päämerkkijonon määrittämiseen. Kolmas argumentti on valinnainen ja sitä käytetään erityyppisten lippujen määrittämiseen.
Luo Python-tiedosto seuraavalla komentosarjalla, joka vastaa regex-kuviota määritetyn merkkijonon kanssa match()-funktion avulla. Ensinnäkin käytetään määritettyä regex-mallia vastaamaan. Seuraavaksi hakusana otetaan käyttäjältä, ja sitä käytetään säännöllisenä lausekkeena merkkijonon arvon kanssa. Jos jokin vastaavuus löytyy, hakusana tulostetaan. Muussa tapauksessa tulostetaan 'Vastaavaa arvoa ei löydy' -merkkijono.
#Tuo tarvittava moduulituonti re
#Määritä toiminto, jolla tulostetaan vastaava tulos
def matchString ( ) :
#Tarkista match()-funktion palautusarvo
jos kera ! = Ei mitään:
Tulosta ( ''' + matto.ryhmä ( ) + '' löytyy '' + strValue + ''' )
muu:
Tulosta ( 'Vastaavaa arvoa ei löytynyt.' )
#Määritä merkkijonoarvo
strValue = 'Ensimmäinen sisällä ensimmäinen ulkona.'
#Yhdistä merkkijono kuvion perusteella
matto = re.match ( '^Ensin' , strValue )
#Soita-toiminto tulostaa ottelun tulos
matchString ( )
#Ota hakumerkkijono
inValue = syöte ( 'Anna hakuarvo:' )
matto = re.match ( inValue + , strValue )
#Soita-toiminto tulostaa ottelun tulos
matchString ( )
Seuraava tulos tulee näkyviin 'ensimmäiselle' tuloarvolle:
Esimerkki 2: Etsi merkkijono Findall()-funktiolla
Findall()-funktiota käytetään palauttamaan kaikki vastaavat sanat, jotka löytyvät päämerkkijonosta monikkona.
Syntaksi:
re.findall ( kuvio, merkkijono, liput = 0 )
Tässä ensimmäistä argumenttia käytetään määrittämään säännöllinen lausekekuvio. Toista argumenttia käytetään päämerkkijonon määrittämiseen. Kolmas argumentti on valinnainen ja sitä käytetään erityyppisten lippujen määrittämiseen.
Luo Python-tiedosto seuraavalla komentosarjalla, joka ottaa käyttäjältä päämerkkijonon arvon ja hakumerkkijonoarvon. Käytä seuraavaksi hakusanaa säännöllisen lausekkeen mallissa löytääksesi hakusanan päämerkkijonosta. Tulosten kokonaismäärä tulostetaan.
#Tuo tarvittava moduulituonti re
#Ota merkkijonoarvo
inValue = syöte ( 'Syötä merkkijono:' )
#Ota hakusana
srcValue = syöte ( 'Anna hakusana:' )
#Hae sanaa merkkijonosta
srcResult = re.findall ( srcValue + '\Sisään*' , inValue )
#Tulosta hakutulos
Tulosta ( 'sana' + srcValue + '' löytyy merkkijonosta'
+ str ( vain ( srcTulos ) ) + ' ajat.' )
Tuotoksen mukaan hakusana 'syö' löytyy kahdesti 'Syömme elääksemme ja emme elä syödäksemme' -päämerkkijonosta.
Esimerkki 3: Hae merkkijonoa Search()-funktiolla
Search() on toinen funktio, joka hakee tiettyä kuviota merkkijonoarvosta. Se sisältää samat argumentit kuin match()- ja findall()-funktiot. Luo Python-tiedosto seuraavalla skriptillä, joka etsii sanaa 'Python' merkkijonoarvosta, joka otetaan käyttäjältä. Jos hakusana on syöttöarvossa, tulostetaan onnistumisviesti. Muussa tapauksessa tulostetaan virheilmoitus.
#Tuo re-moduulituonti re
#Ota merkkijonoarvo
inValue = syöte ( 'Syötä merkkijono:' )
#Hae tiettyä sanaa merkkijonoarvosta
srcResult = re.search ( r 'Python\w*' , inValue )
#Tarkista, löytyykö hakusana vai ei
jos srcTulos:
Tulosta ( ''' + srcResult.group ( ) + '' löytyy '' + inValue + ''' )
muu:
Tulosta ( 'Hakumerkkijonoa ei löydy.' )
Lähtö:
Seuraava tulos tulee näkyviin, jos syötemerkkijono on 'Pidän Python-ohjelmoinnista':
Seuraava tulos tulee näkyviin, jos syötemerkkijono on 'Pidän PHP-ohjelmoinnista':
Esimerkki 4: Korvaa merkkijono Sub()-funktiolla
Sub()-funktiota käytetään etsimään tiettyä merkkijonoa mallin perusteella ja korvaamaan se toisella sanalla. Tämän funktion syntaksi annetaan seuraavasti:
Syntaksi:
re.sub ( kuvio, korvaa_merkkijono, päämerkkijono )
Tämän funktion ensimmäinen argumentti sisältää kuvion, jota käytetään etsimään tiettyä merkkijonoa päämerkkijonosta.
Tämän funktion toinen argumentti sisältää 'korvaa'-merkkijonon arvon.
Tämän funktion kolmas argumentti sisältää päämerkkijonon.
Tämä funktio palauttaa korvatun merkkijonon, jos päämerkkijonossa on vastaava sana ensimmäisen argumentin perusteella.
Luo Python-tiedosto seuraavalla skriptillä, joka etsii kahta numeroa merkkijonon lopusta. Jos merkkijonon lopussa on kaksi numeroa, numerot korvataan '$50'-merkkijonolla.
#Tuo re-moduulituonti re
#Määritä päämerkkijono
strValue = 'Kirjan hinta on 70'
#Määritä hakumalli
malli = '[0-9]{2}'
#Määritä korvausarvo
korvaaValue = '50 dollaria'
#Etsi ja korvaa merkkijono kuvion perusteella
modified_strValue = re.sub ( kuvio, korvaaValue, strValue )
#Tulosta alkuperäiset ja muokatut merkkijonoarvot
Tulosta ( 'Alkuperäinen merkkijono:' + strValue )
Tulosta ( 'Muokattu merkkijono:' + modified_strValue )
Lähtö:
Pääjonon lopussa oli 70. Joten 70 korvataan 50 dollarilla korvatussa merkkijonossa.
Esimerkki 5: Korvaa merkkijono Subn()-funktiolla
Subn()-funktio toimii kuten sub()-funktio, paitsi että se palauttaa tulosteen monikkona, jossa ensimmäinen indeksi sisältää korvatun arvon ja toinen indeksi sisältää osumien kokonaismäärän.
Luo Python-tiedosto seuraavalla komentosarjalla, joka etsii aakkoset A–L 'LinuxHint.com'-merkkijonosta subn()-funktiolla:
#Tuo re-moduulituonti re
#Määritä päämerkkijono
strValue = 'LinuxHint.com'
#Määritä hakumalli
malli = '[TOI]'
#Määritä korvausarvo
korvaaValue = '*'
#Etsi ja korvaa merkkijono kuvion perusteella
modified_strValue = re.subn ( kuvio, korvaaValue, strValue )
#Tulosta alkuperäinen merkkijono ja subn()
Tulosta ( 'Alkuperäinen merkkijono: \n ' + strValue )
Tulosta ( 'Subn()-funktion tulos:' )
Tulosta ( modified_strValue )
Lähtö:
Seuraavan tulosteen mukaan 'L'- ja 'H'-merkit korvataan '*'-merkillä.
Esimerkki 6: Jaa merkkijono Split()-funktiolla
Luo Python-tiedosto seuraavalla komentosarjalla, joka jakoi päämerkkijonon useisiin osiin split()-funktiolla regex-mallin perusteella:
#Tuo re-moduulituonti re
#Määritä merkkijonoarvo
strVal= 'Rupa Akter; Nira Chowdhury; Mazharul Islam'
#Määritä kuvio, jota käytetään tietojen jakamiseen
malli = '[^A-Za-z ]'
#Tallenna jaetut arvot luetteloon
split_result = re.split ( kuvio, strVal )
Tulosta ( 'Split()-funktion tulos:' )
Tulosta ( split_result )
Lähtö:
Tulosteen mukaan päämerkkijono on jaettu kolmeen osaan skriptissä käytetyn '[^A-Za-z ]' -mallin perusteella.
Johtopäätös
Yleisimmin käytettyjen metamerkkien, alueiden ja Pythonin sisäänrakennettujen funktioiden tarkoitus merkkijonojen etsimiseen, korvaamiseen ja jakamiseen on esitetty tässä opetusohjelmassa yksinkertaisia Python-skriptejä käyttäen.