Αντιστροφή συνόλων χαρακτήρων σε regex
Χρησιμοποιώντας το καρέτ '^' στην αρχή
των αγκύλων μπορούμε να αντιστρέψουμε
τον επιθυμητό στόχο. Αν, για παράδειγμα, η εντολή [ab]
αναζητά το γράμμα 'a' ή 'b', τότε
η εντολή [^ab] θα αναζητά όλους
τους χαρακτήρες, εκτός από 'a' και 'b'.
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης είναι
ως εξής: γράμμα 'x', μετά ΟΧΙ γράμμα
'a', όχι 'b' και όχι 'c',
μετά γράμμα 'z':
txt = 'xaz xbz xcz xez'
res = re.sub('x[^abc]z', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'xax xbx xcx !'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης είναι
ως εξής: γράμμα 'x', μετά ΟΧΙ πεζό
λατινικό γράμμα, μετά γράμμα 'z':
txt = 'xaz xbz x1z xCz'
res = re.sub('x[^a-z]z', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'xaz xbz ! !'
Πρακτικά προβλήματα
Γράψτε μια κανονική έκφραση που θα βρει strings
σύμφωνα με το μοτίβο: ψηφίο 1, μετά χαρακτήρας
όχι 'e' και όχι 'x', ψηφίο
2.
Γράψτε μια κανονική έκφραση που θα βρει strings
σύμφωνα με το μοτίβο: γράμμα 'x', μετά ΟΧΙ
ψηφίο από 2 έως 7, γράμμα
'z'.
Γράψτε μια κανονική έκφραση που θα βρει strings
σύμφωνα με το μοτίβο: γράμμα 'x', μετά ΟΧΙ
κεφαλαίο λατινικό γράμμα από 1 και περισσότερες
φορές, γράμμα 'z'.
Γράψτε μια κανονική έκφραση που θα βρει strings
σύμφωνα με το μοτίβο: γράμμα 'x', μετά ΟΧΙ
κεφαλαίο ή πεζό λατινικό γράμμα και
όχι ψηφίο από 1 έως 5 από 1
και περισσότερες φορές, γράμμα 'z'.