Python RegEx: re.match(), re.search(), re.findall() esimerkillä
Missä on säännöllinen lauseke Python?
A Säännöllinen lauseke (RE) ohjelmointikielessä on erityinen tekstimerkkijono, jota käytetään kuvaamaan hakumallia. Se on erittäin hyödyllinen poimittaessa tietoja tekstistä, kuten koodista, tiedostoista, lokista, laskentataulukoista tai jopa asiakirjoista.
Kun käytät Python säännöllinen lauseke ensimmäinen asia on tunnistaa, että kaikki on pohjimmiltaan merkkiä, ja kirjoitamme malleja vastaamaan tiettyä merkkijonoa, jota kutsutaan myös merkkijonoksi. Ascii tai latinalaiset kirjaimet ovat niitä, jotka ovat näppäimistössäsi, ja Unicodea käytetään vastaamaan vieraita tekstiä. Se sisältää numerot ja välimerkit ja kaikki erikoismerkit, kuten $#@!% jne.
Esimerkiksi a Python säännöllinen lauseke voisi käskeä ohjelman etsimään tiettyä tekstiä merkkijonosta ja tulostamaan tuloksen sen mukaisesti. Ilmaisu voi sisältää
- Tekstin sovitus
- Kertaus
- haarautuvan
- Kuvio-koostumus jne.
Säännöllinen lauseke tai RegEx in Python on merkitty RE (RE:t, regexes tai regex-kuvio) tuodaan kautta uudelleen moduuli. Python tukee säännöllistä lauseketta kirjastojen kautta. RegEx sisään Python tukee erilaisia asioita, mm Muokkaimet, tunnisteet ja välilyönnit.
tunnisteet | muokkaajia | Valkovälimerkit | Pako vaaditaan |
---|---|---|---|
\d= mikä tahansa luku (numero) | \d edustaa numeroa. Esim: \d{1,5} se ilmoittaa numeron välillä 1,5, kuten 424,444,545 XNUMX XNUMX jne. | \n = uusi rivi | . + *? [] $ ^ () {} | \ |
\D = kaikkea muuta kuin numero (ei-numero) | + = vastaa yhtä tai useampaa | \s = välilyönti | |
\s = välilyönti (sarkain, välilyönti, rivinvaihto jne.) |
? = vastaa 0 tai 1 | \t = välilehti | |
\S= kaikkea muuta kuin välilyönti | * = 0 tai enemmän | \e = pako | |
\w = kirjaimet ( Vastaa aakkosnumeerista merkkiä, mukaan lukien "_") | $ vastaa merkkijonon loppua | \r = vaunun paluu | |
\W =kaikki muut kuin kirjaimet ( Vastaa ei-aakkosnumeerista merkkiä, ei "_") | ^ vastaa merkkijonon alkua | \f= lomakesyöttö | |
. = kaikkea muuta kuin kirjaimia (pisteitä) | | vastaa joko tai x/y | ------ | |
\b = mikä tahansa merkki paitsi uusi rivi | [] = vaihteluväli tai "varianssi" | ------ | |
\. | {x} = tämä edellisen koodin määrä | ------ |
Säännöllisen lausekkeen (RE) syntaksi
import re
- "re"-moduuli mukana Python käytetään ensisijaisesti merkkijonojen etsimiseen ja manipulointiin
- Käytetään usein myös verkkosivuille "kaavinta" (poimia suuria määriä dataa verkkosivustoilta)
Aloitamme lausekkeiden opetusohjelman tällä yksinkertaisella harjoituksella käyttämällä lausekkeita (w+) ja (^).
Esimerkki w+- ja ^-lausekkeesta
- "^": Tämä lauseke vastaa merkkijonon alkua
- "w+": Tämä lauseke vastaa merkkijonon aakkosnumeerista merkkiä
Täällä näemme a Python RegEx Esimerkki siitä, kuinka voimme käyttää w+- ja ^-lausekkeita koodissamme. Peitämme funktion re.findall() in Python, myöhemmin tässä opetusohjelmassa, mutta jonkin aikaa keskitymme vain \w+- ja \^-lausekkeisiin.
Esimerkiksi merkkijonolle "guru99, koulutus on hauskaa", jos suoritamme koodin w+:lla ja^, se antaa tulosteen "guru99".
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Muista, että jos poistat +merkin w+:sta, tulos muuttuu ja se antaa vain ensimmäisen kirjaimen ensimmäisen merkin, eli [g]
Esimerkki \s-lausekkeesta re.split-funktiossa
- "s": Tätä lauseketta käytetään välilyönnin luomiseen merkkijonoon
Ymmärtääksesi, miten tämä RegEx toimii Python toimii, aloitamme yksinkertaisella Python RegEx Esimerkki jaetusta funktiosta. Esimerkissä olemme jakaneet jokaisen sanan "re.split"-funktiolla ja samalla olemme käyttäneet lauseketta \s, joka mahdollistaa merkkijonon jokaisen sanan jäsentämisen erikseen.
Kun suoritat tämän koodin, se antaa sinulle tulosteen ['we', 're', 'splitting', 'the', 'words'].
Katsotaan nyt, mitä tapahtuu, jos poistat "\" s:stä. Tulosteessa ei ole 's'-aakkosta, koska olemme poistaneet merkkijonosta '\':n ja se arvioi "s":n tavalliseksi merkiksi ja jakaa näin sanat aina, kun se löytää "s":n merkkijonosta.
Samoin on sarjoja muitakin Python säännöllinen lauseke, jota voit käyttää eri tavoin Python kuten \d,\D,$,\.,\b jne.
Tässä on täydellinen koodi
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
Seuraavaksi aiomme nähdä, minkä tyyppisiä menetelmiä käytetään säännöllisen lausekkeen kanssa Python.
Säännöllisten lausekkeiden menetelmien käyttäminen
"Re"-paketti tarjoaa useita tapoja suorittaa kyselyitä syötemerkkijonolle. Tulemme näkemään menetelmiä uudelleen Python:
- re.match()
- re.search()
- re.findall()
Huomautuksia: Säännöllisten lausekkeiden perusteella Python tarjoaa kaksi erilaista primitiivistä operaatiota. Vastaavuusmenetelmä tarkistaa osuvuuden vain merkkijonon alusta, kun taas haku tarkistaa vastaavuuden mistä tahansa merkkijonosta.
re.match()
re.match() uudelleen sisään -toiminto Python etsii säännöllisen lausekkeen mallia ja palauttaa ensimmäisen esiintymän. The Python RegEx Match -menetelmä tarkistaa osuvuuden vain merkkijonon alusta. Joten jos ensimmäiseltä riviltä löytyy osuma, se palauttaa osumaobjektin. Mutta jos osuma löytyy joltakin muulta riviltä, Python RegEx Match -funktio palauttaa nollan.
Harkitse esimerkiksi seuraavaa koodia Python re.match()-funktio. Ilmaisu "w+" ja "\W" vastaavat sanoja, jotka alkavat kirjaimella "g", ja sen jälkeen mitään, mikä ei ala g:llä, ei tunnisteta. Tarkistaaksemme luettelon tai merkkijonon jokaisen elementin vastaavuuden suorittamme tässä forloopin Python re.match() Esimerkki.
re.search(): Kuvion etsiminen tekstistä
re.search() toiminto etsii säännöllisen lausekkeen mallia ja palauttaa ensimmäisen esiintymän. Toisin kuin Python re.match(), se tarkistaa kaikki syötemerkkijonon rivit. The Python re.search()-funktio palauttaa hakuobjektin, kun kuvio löytyy, ja "null", jos kuviota ei löydy
Kuinka käyttää hakua ()?
Jotta voit käyttää search()-toimintoa, sinun on tuotava Python re-moduuli ensin ja suorita sitten koodi. The Python re.search() -funktio ottaa "kuvion" ja "tekstin" skannattavaksi päämerkkijonosta
Esimerkiksi tässä etsimme kahta kirjaimellista merkkijonoa "Software testaus" "guru99", tekstimerkkijonosta "Software Testaus on hauskaa”. "Ohjelmistostausta" varten löysimme vastaavuuden, joten se palauttaa tulosteen Python re.search() Esimerkki: "löytyi haku", kun taas sanalle "guru99" emme löytäneet merkkijonoa, joten se palauttaa tuloksena "Ei hakua".
re.findall()
löydä kaikki () moduulia käytetään etsimään "kaikki" esiintymät, jotka vastaavat tiettyä mallia. Sitä vastoin search()-moduuli palauttaa vain ensimmäisen esiintymän, joka vastaa määritettyä mallia. findall() toistaa tiedoston kaikilla riveillä ja palauttaa kaikki ei-päällekkäiset kuvion osumat yhdessä vaiheessa.
Kuinka käyttää re.findall() in Python?
Tässä on luettelo sähköpostiosoitteista, ja haluamme, että kaikki sähköpostiosoitteet haetaan luettelosta. Käytämme menetelmää re.findall() Python. Se löytää luettelosta kaikki sähköpostiosoitteet.
Tässä on täydellinen koodi esimerkille re.findall()
import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print((z.groups())) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ') if re.search(pattern, text): print('found a match!') else: print('no match') abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print(email)
Python Liput
Paljon Python Regex-menetelmät ja Regex-funktiot ottavat valinnaisen argumentin nimeltä Flags. Nämä liput voivat muuttaa annetun merkitystä Python Regex-kuvio. Näiden ymmärtämiseksi näemme yhden tai kaksi esimerkkiä näistä lipuista.
Käytetään erilaisia lippuja Python sisältää
Regex-lippujen syntaksi | Mitä tämä lippu tekee |
---|---|
[re.M] | Tee alku/loppu harkitsemaan jokaista riviä |
[re.I] | Se jättää tapauksen huomioimatta |
[re.S] | Tee [. ] |
[re.U] | Tee { \w,\W,\b,\B} Unicode-sääntöjen mukaan |
[re.L] | Aseta {\w,\W,\b,\B} seuraamaan maa-asetusta |
[re.X] | Salli kommentointi Regexissä |
Esimerkki re.M- tai Multiline-lipuista
Monirivisessä kuviomerkki [^] vastaa merkkijonon ensimmäistä merkkiä ja jokaisen rivin alkua (seuraa välittömästi jokaisen rivinvaihdon jälkeen). Vaikka lauseketta pientä "w" käytetään merkitsemään välilyöntiä merkeillä. Kun suoritat koodin, ensimmäinen muuttuja "k1" tulostaa vain merkin "g" sanalle guru99, kun taas kun lisäät monirivisen lipun, se hakee kaikkien merkkijonon elementtien ensimmäiset merkit.
Tässä on koodi
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Ilmoitimme muuttujan xx merkkijonolle ”guru99…”. uraguru99…. seleeni”
- Suorita koodi ilman monirivisiä lippuja, se antaa riviltä vain 'g'
- Suorita koodi lipulla "multiline", kun tulostat 'k2', se antaa tulosteen muodossa 'g', 'c' ja 's'
- Joten ero, jonka voimme nähdä yllä olevassa esimerkissä monirivien lisäämisen jälkeen ja ennen.
Samoin voit käyttää myös muita Python liput, kuten re.U (Unicode), re.L (Seuraa aluetta), re.X (Salli kommentointi) jne.
Python 2-esimerkki
Yllä olevat koodit ovat Python 3 esimerkkiä, jos haluat ajaa sisään Python 2 harkitse seuraavaa koodia.
# Example of w+ and ^ Expression import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print r1 # Example of \s expression in re.split function import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print (re.split(r'\s','we are splitting the words')) print (re.split(r's','split the words')) # Using re.findall for text import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print(z.groups()) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print 'Looking for "%s" in "%s" ->' % (pattern, text), if re.search(pattern, text): print 'found a match!' else: print 'no match' abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print email # Example of re.M or Multiline Flags import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print k1 print k2
Testaa Python tuntemus
1. Mitä menetelmää käytetään etsimään kaikki kuvion esiintymät merkkijonosta?
- re.search()
- re.match()
- re.findall()
- re.split()
2. Mitä \d-merkkiluokka edustaa säännöllisissä lausekkeissa?
- Mikä tahansa numero (0-9)
- Mikä tahansa ei-numeroinen merkki
- Mikä tahansa välilyöntimerkki
- Mikä tahansa kirjain tai numero
3. Mitä funktiota käyttäisit merkkijonon jakamiseen välilyöntien perusteella?
- re.split(r'\s', merkkijono)
- re.findall(r'\w+', merkkijono)
- re.match(r'\s+', merkkijono)
- re.split(r'\w+', merkkijono)
4. Mikä on tärkein ero re.match()- ja re.search()-funktioiden välillä?
- re.match() etsii kuviota merkkijonon alusta, kun taas re.search() etsii kuviota mistä tahansa merkkijonosta.
- re.match() palauttaa kaikki osumat, kun taas re.search() palauttaa ensimmäisen osuman.
- re.search() on nopeampi kuin re.match().
- Molemmat toiminnot toimivat samalla tavalla.
Yhteenveto
Säännöllinen lauseke a:ssa ohjelmointikieli on erityinen tekstimerkkijono, jota käytetään kuvaamaan hakumallia. Se sisältää numerot ja välimerkit ja kaikki erikoismerkit, kuten $#@!% jne. Lauseke voi sisältää kirjaimellisia
- Tekstin sovitus
- Kertaus
- haarautuvan
- Kuvio-koostumus jne.
In Python, säännöllinen lauseke merkitään RE:ksi (RE:t, regexes tai regex-kuvio) upotettuna Python uudelleen moduuli.
- "re"-moduuli mukana Python käytetään ensisijaisesti merkkijonojen etsimiseen ja manipulointiin
- Käytetään usein myös verkkosivujen "kaappaukseen" (suuren määrän datan poimiminen verkkosivustoilta)
- Säännöllisiä lausekemenetelmiä ovat mm re.match(),re.search()& re.findall()
- Muut Python RegEx-korvausmenetelmät ovat sub() ja subn(), joita käytetään korvaamaan vastaavat merkkijonot re:ssä
- Python Liput Paljon Python Regex-menetelmät ja Regex-funktiot ottavat valinnaisen argumentin nimeltä Flags
- Nämä liput voivat muuttaa annetun Regex-kuvion merkitystä
- eri Python Regex-menetelmissä käytetyt liput ovat re.M, re.I, re.S jne.