Μη-αποθηκευτικές παρενθέσεις στις κανονικές εκφράσεις της Python

Οι παρενθέσεις ( ) εκτελούν δύο λειτουργίες - ομαδοποίηση χαρακτήρων και τη λειτουργία της "θύρας" (capturing group). Και τι κάνουμε αν χρειάζεται να ομαδοποιήσουμε, αλλά να μην το βάλουμε στην "θύρα"; Για την επίλυση αυτού του προβλήματος έχουν σχεδιαστεί ειδικές μη-αποθηκευτικές παρενθέσεις (?: ) - ομαδοποιούν, αλλά δεν τοποθετούν στην "θύρα".

Παράδειγμα

Στο επόμενο παράδειγμα, οι πρώτες παρενθέσεις χρειαζόμαστε για ομαδοποίηση, και οι δεύτερες - για "θύρα". Ωστόσο, και οι δύο παρενθέσεις αποθηκεύουν δεδομένα στην "θύρα":

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

Σαν αποτέλεσμα, στις "θύρες" μας θα υπάρχουν τα εξής:

pythonprint(res[0]) # θα εμφανίσει 'abab123'
print(res[1]) # θα εμφανίσει 'ab'
print(res[2]) # θα εμφανίσει '123'

Παράδειγμα

Ας κάνουμε έτσι ώστε το πρώτο ζευγάρι παρενθέσεων να ομαδοποιεί μόνο, αλλά να μην τοποθετεί στην "θύρα":

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

Σαν αποτέλεσμα, στην πρώτη "θύρα" θα είναι ο αριθμός μας:

pythonprint(res[1]) # θα εμφανίσει '123'