Pythonin säännöllisten lausekkeiden tallentamattomat sulkeet
Sulkeet ( ) suorittavat kaksi tehtävää -
merkkien ryhmittely ja tallennuspaikan funktio. Mutta
mitä tehdä, jos haluat ryhmitellä, mutta
ei tallentaa tallennuspaikkaan? Tämän ongelman
ratkaisemiseksi on keksitty erityiset tallentamattomat
sulkeet (?: ) - ne ryhmittelevät,
mutta eivät tallenna tallennuspaikkaan.
Esimerkki
Seuraavassa esimerkissä tarvitsemme ensimmäiset sulkeet ryhmittelyyn ja toiset tallennuspaikkaan. Kuitenkin molemmat sulkeet tallentavat tiedot tallennuspaikkaan:
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Tuloksena tallennuspaikoissamme on seuraavaa:
print(res[0]) # tulostaa 'abab123'
print(res[1]) # tulostaa 'ab'
print(res[2]) # tulostaa '123'
Esimerkki
Tehdään niin, että ensimmäinen sulkepari vain ryhmittelee, mutta ei tallenna tallennuspaikkaan:
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Tuloksena ensimmäisessä tallennuspaikassa on numeromme:
print(res[1]) # tulostaa '123'