erilainen käyttäytyminen re: n välillä.finditer ja re.findall

saan tämän esimerkin säännöllisen lausekkeen operaatioista Python 2: ssa.* Dokumentaatio ja tämä esimerkki hyvin kuvattu tässä yksityiskohtia joitakin muutoksia. Selittää koko esimerkki, let ’ s saada merkkijono tyyppi muuttuja puhelu,

text = "He was carefully disguised but captured quickly by police."

ja kääntää tyyppi säännöllinen lauseke kuvio kuin,

regEX = r"\w+ly"pattern = re.compile(regEX)

\w keskiarvo vastaa mitä tahansa sanan merkkiä (aakkosnumeerinen & alaviiva), + keskiarvo vastaa yhtä tai useampaa edellistä merkkiä ja koko merkitys on valittava mikä tahansa sana, jonka pääte on ly. On vain kaksi 2 sanaa (”huolellisesti” ja ”nopeasti”), joka täyttää edellä säännöllinen lauseke.

ennen siirtymistä re.findall () tai re.finditer (), katsotaan mitä tekee re.haku () tarkoittaa Pythonissa 2.* Dokumentointi.

skannaa merkkijonon läpi etsien ensimmäistä kohtaa, jossa säännöllinen lausekekuvio tuottaa vastaavuuden, ja palauta vastaava MatchObject-ilmentymä. Palauta Ei mitään, jos merkkijonon sijainti ei vastaa kuviota; huomaa, että tämä on eri asia kuin nollapituisen vastaavuuden löytäminen merkkijonon jossakin vaiheessa.

seuraavat koodirivit antavat perusymmärryksen re: stä.etsiä().

search = pattern.search(text)print(search)print(type(search))#output<re.Match object; span=(7, 16), match='carefully'><class 're.Match'>

se tuottaa re.MatchObject of class type object which have 13 of supported methods and attributes according to Python 2.* Dokumentointi. Tämä span () – menetelmä koostuu text muuttujan täsmäytetyn sanan alku-ja loppupisteistä (edellä mainitussa esimerkissä 7 ja 16). re.haku () – menetelmä huomioi vain noin ensimmäisen ottelun, muuten paluu None.

siirrytään kysymykseen, sitä ennen katsotaan, mitä tekee re.finditer () tarkoittaa Pythonissa 2.* Dokumentointi.

Palauta iteraattori, joka tuottaa matchobject-esiintymiä merkkijonon RE-kuvion kaikille ei-päällekkäisille osumille. Merkkijono skannataan vasemmalta oikealle, ja tulitikut palautetaan löydetyssä järjestyksessä. Tyhjät ottelut sisältyvät tulokseen.

tulevat seuraavat koodirivit antavat perusymmärryksen re: stä.finditer ().

finditer = pattern.finditer(text)print(finditer)print(type(finditer))#output<callable_iterator object at 0x040BB690><class 'callable_iterator'>

yllä olevassa esimerkissä saadaan iteraattorin oliot, joiden on oltava silmukoita. Tämä ei selvästikään ole se tulos, jonka haluamme. Silmukoidaan finditer ja katsotaan, mitä tämän iteraattorin objektien sisällä on.

for anObject in finditer: print(anObject) print(type(anObject)) print()#output<re.Match object; span=(7, 16), match='carefully'><class 're.Match'><re.Match object; span=(40, 47), match='quickly'><class 're.Match'>

tämä tulos on pitkälti samanlainen kuin re.haku () tulos, jonka saamme aikaisemmin. Uusi tulos näkyy kuitenkin edellä tuotoksessa, <re.Match object; span=(40, 47), match='quickly'>. Kuten mainitsen aiemmin Python 2.* Dokumentaatio, re.haku () skannaa merkkijonon läpi etsien ensimmäistä paikkaa, jossa säännöllinen lausekekuvio tuottaa ottelun ja re: n.finditer () skannaa merkkijonon läpi etsien kaikkia paikkoja, joissa säännöllinen lausekekuvio tuottaa matcheja ja palauttaa enemmän yksityiskohtia kuin re.findall () – menetelmä.

Here what does re.findall () tarkoittaa Pythonissa 2.* Dokumentointi.

Palauta kaikki ei-päällekkäiset kuvion osumat merkkijonoluettelona. Merkkijono skannataan vasemmalta oikealle, ja tulitikut palautetaan löydetyssä järjestyksessä. Jos kuviossa on yksi tai useampi ryhmä, palauta ryhmäluettelo; tämä on luettelo tupleista, jos kuviossa on useampi kuin yksi ryhmä. Tyhjät ottelut sisältyvät tulokseen.

ymmärretään, mitä re: ssä tapahtuu.findall ().

findall = pattern.findall(text)print(findall)print(type(findall))#output<class 'list'>

tällä tulosteella saadaan vain sovitut sanat text muuttujaan, Muuten palautetaan tyhjä lista. Tuotoksessa oleva luettelo, joka on samanlainen kuin re: n attribuutti match.MatchObject.

tässä on koko koodi ja kokeilin Python 3.7: ssä.

import retext = "He was carefully disguised but captured quickly by police."regEX = r"\w+ly"pattern = re.compile(regEX)search = pattern.search(text)print(search)print(type(search))print()findall = pattern.findall(text)print(findall)print(type(findall))print()finditer = pattern.finditer(text)print(finditer)print(type(finditer))print()for anObject in finditer: print(anObject) print(type(anObject)) print()