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:

pythontxt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)

Tuloksena tallennuspaikoissamme on seuraavaa:

pythonprint(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:

pythontxt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)

Tuloksena ensimmäisessä tallennuspaikassa on numeromme:

pythonprint(res[1]) # tulostaa '123'