Μη-αποθηκευτικές παρενθέσεις στις κανονικές εκφράσεις της Python
Οι παρενθέσεις ( ) εκτελούν δύο λειτουργίες -
ομαδοποίηση χαρακτήρων και τη λειτουργία της "θύρας" (capturing group).
Και τι κάνουμε αν χρειάζεται να ομαδοποιήσουμε, αλλά
να μην το βάλουμε στην "θύρα"; Για την επίλυση αυτού του
προβλήματος έχουν σχεδιαστεί ειδικές μη-αποθηκευτικές
παρενθέσεις (?: ) - ομαδοποιούν,
αλλά δεν τοποθετούν στην "θύρα".
Παράδειγμα
Στο επόμενο παράδειγμα, οι πρώτες παρενθέσεις χρειαζόμαστε για ομαδοποίηση, και οι δεύτερες - για "θύρα". Ωστόσο, και οι δύο παρενθέσεις αποθηκεύουν δεδομένα στην "θύρα":
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
Σαν αποτέλεσμα, στις "θύρες" μας θα υπάρχουν τα εξής:
print(res[0]) # θα εμφανίσει 'abab123'
print(res[1]) # θα εμφανίσει 'ab'
print(res[2]) # θα εμφανίσει '123'
Παράδειγμα
Ας κάνουμε έτσι ώστε το πρώτο ζευγάρι παρενθέσεων να ομαδοποιεί μόνο, αλλά να μην τοποθετεί στην "θύρα":
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
Σαν αποτέλεσμα, στην πρώτη "θύρα" θα είναι ο αριθμός μας:
print(res[1]) # θα εμφανίσει '123'