Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Lookahead, Lookbehind ja Ei-ahne Täsmäys | Edistyneet Säännölliset Lausekkeet ja Sovellukset
Pythonin Säännölliset Lausekkeet

Lookahead, Lookbehind ja Ei-ahne Täsmäys

Pyyhkäise näyttääksesi valikon

Edistyneiden säännöllisten lausekkeiden ominaisuuksien, kuten lookaheadin, lookbehindin ja ei-ahneiden kvanttorien ymmärtäminen mahdollistaa erittäin tarkan mallin tunnistamisen Pythonissa. Lookahead ja lookbehind ovat nollaleveyksisiä ehtoja, joiden avulla voidaan tarkistaa, esiintyykö tietty kuvio tekstissä nykyisen sijainnin edessä tai takana ilman, että kyseinen kuvio sisällytetään itse osumaan. Ei-ahneet kvanttorit antavat mahdollisuuden hallita, kuinka paljon tekstiä kuvio kattaa, varmistaen, että osuma kattaa vain tarvittavan määrän.

  • Lookahead kirjoitetaan muodossa (?=...) ja tarkistaa, seuraako tietty kuvio nykyistä sijaintia;
  • Lookbehind, kirjoitetaan muodossa (?<=...), tarkistaa, edeltääkö tietty kuvio nykyistä sijaintia;
  • Ei-ahneet kvanttorit kuten *? ja +? muuttavat kvanttorien oletusarvoista ahnetta käyttäytymistä;
  • Oletuksena kvanttorit kuten * ja + kattavat mahdollisimman paljon tekstiä; lisäämällä ? niistä tulee ei-ahneita, jolloin ne kattavat mahdollisimman vähän tekstiä.

Lookahead-esimerkki: \w+(?=\d) osuu sanaan vain, jos sitä seuraa välittömästi numero, mutta numero ei kuulu osumaan. Lookbehind toimii samalla tavalla, mutta päinvastaiseen suuntaan.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Miten lookahead ja ei-ahneet kvanttorit vaikuttavat mallin tunnistukseen

Esimerkin lookahead-kuvio \w+(?=\d) osuu mihin tahansa sanamerkkijonoon (\w+) vain, jos sitä seuraa suoraan numero (\d). Osuma ei sisällä numeroa, koska lookahead ei kuluta tarkistamiaan merkkejä. Tämä on hyödyllistä, kun halutaan löytää sanoja, jotka täyttävät tietyn ehdon seuraavasta osasta, mutta ilman että tuo osa sisältyy osumaan.

Ei-ahnas kvanttori *? kuviossa <b>(.*?)</b> muuttaa, kuinka paljon tekstiä osuu <b> ja </b>-tagien väliin. Ahne kvanttori kuten .* kattaisi mahdollisimman paljon, mahdollisesti kaiken ensimmäisestä <b>:stä viimeiseen </b>:hen. Käyttämällä *? kuvio kattaa mahdollisimman vähän, jolloin jokaisen tagiparin välinen teksti saadaan yksittäin. Tämä estää ylisuuret osumat ja varmistaa, että saat pienimmän mahdollisen osuman.

Lookahead ja ei-ahneet kvanttorit antavat tehokkaan hallinnan siihen, miten säännölliset lausekkeet valitsevat tekstiä:

  • Lookahead mahdollistaa sen, että osuma on tietyn kuvion seuraama ilman, että se sisältyy osumaan;
  • Ei-ahneet kvanttorit auttavat välttämään liian laajojen tekstiosuuksien kattamisen.
question mark

Mitä tekee ei-ahne kvantifioija *??

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Lookahead, Lookbehind ja Ei-ahne Täsmäys

Edistyneiden säännöllisten lausekkeiden ominaisuuksien, kuten lookaheadin, lookbehindin ja ei-ahneiden kvanttorien ymmärtäminen mahdollistaa erittäin tarkan mallin tunnistamisen Pythonissa. Lookahead ja lookbehind ovat nollaleveyksisiä ehtoja, joiden avulla voidaan tarkistaa, esiintyykö tietty kuvio tekstissä nykyisen sijainnin edessä tai takana ilman, että kyseinen kuvio sisällytetään itse osumaan. Ei-ahneet kvanttorit antavat mahdollisuuden hallita, kuinka paljon tekstiä kuvio kattaa, varmistaen, että osuma kattaa vain tarvittavan määrän.

  • Lookahead kirjoitetaan muodossa (?=...) ja tarkistaa, seuraako tietty kuvio nykyistä sijaintia;
  • Lookbehind, kirjoitetaan muodossa (?<=...), tarkistaa, edeltääkö tietty kuvio nykyistä sijaintia;
  • Ei-ahneet kvanttorit kuten *? ja +? muuttavat kvanttorien oletusarvoista ahnetta käyttäytymistä;
  • Oletuksena kvanttorit kuten * ja + kattavat mahdollisimman paljon tekstiä; lisäämällä ? niistä tulee ei-ahneita, jolloin ne kattavat mahdollisimman vähän tekstiä.

Lookahead-esimerkki: \w+(?=\d) osuu sanaan vain, jos sitä seuraa välittömästi numero, mutta numero ei kuulu osumaan. Lookbehind toimii samalla tavalla, mutta päinvastaiseen suuntaan.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Miten lookahead ja ei-ahneet kvanttorit vaikuttavat mallin tunnistukseen

Esimerkin lookahead-kuvio \w+(?=\d) osuu mihin tahansa sanamerkkijonoon (\w+) vain, jos sitä seuraa suoraan numero (\d). Osuma ei sisällä numeroa, koska lookahead ei kuluta tarkistamiaan merkkejä. Tämä on hyödyllistä, kun halutaan löytää sanoja, jotka täyttävät tietyn ehdon seuraavasta osasta, mutta ilman että tuo osa sisältyy osumaan.

Ei-ahnas kvanttori *? kuviossa <b>(.*?)</b> muuttaa, kuinka paljon tekstiä osuu <b> ja </b>-tagien väliin. Ahne kvanttori kuten .* kattaisi mahdollisimman paljon, mahdollisesti kaiken ensimmäisestä <b>:stä viimeiseen </b>:hen. Käyttämällä *? kuvio kattaa mahdollisimman vähän, jolloin jokaisen tagiparin välinen teksti saadaan yksittäin. Tämä estää ylisuuret osumat ja varmistaa, että saat pienimmän mahdollisen osuman.

Lookahead ja ei-ahneet kvanttorit antavat tehokkaan hallinnan siihen, miten säännölliset lausekkeet valitsevat tekstiä:

  • Lookahead mahdollistaa sen, että osuma on tietyn kuvion seuraama ilman, että se sisältyy osumaan;
  • Ei-ahneet kvanttorit auttavat välttämään liian laajojen tekstiosuuksien kattamisen.
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 1
some-alt