Σύνολα χαρακτήρων στις κανονικές εκφράσεις Python
Οι ομάδες χαρακτήρων \d και \w δεν είναι
πολύ ευέλικτες. Ακόμη και ένα τόσο απλό έργο,
όπως το βρείτε όλα τα γράμματα, αλλά όχι τα ψηφία -
δεν μπορεί να λυθεί από αυτές. Για τέτοια έργα
θα πρέπει να χρησιμοποιήσετε αγκύλες,
που αντιπροσωπεύουν την πράξη 'ή'.
Οι αγκύλες αντικαθιστούν έναν
χαρακτήρα, οποιονδήποτε από αυτούς που αναφέρονται μέσα.
Για παράδειγμα, έτσι: x[abc]x -
λέμε ότι στα άκρα πρέπει να υπάρχουν γράμματα
x, και μέσα - ένας χαρακτήρας: ή 'a',
ή 'b', ή 'c'.
Μετά τις αγκύλες μπορείτε να γράψετε
τελεστές επανάληψης. Για παράδειγμα, έτσι:
x[abc]+x - λέμε ότι μέσα
στα x μπορεί να υπάρχει οποιοσδήποτε αριθμός χαρακτήρων
'a', 'b' και 'c' -
σε οποιουσδήποτε συνδυασμούς.
Μπορείτε όχι μόνο να απαριθμήσετε χαρακτήρες, αλλά
να δημιουργήσετε ομάδες χαρακτήρων, γράφοντας μεταξύ
δύο χαρακτήρων παύλα. Για παράδειγμα, έτσι:
[a-d] - παίρνουμε όλους τους χαρακτήρες από
'a' έως 'd'.
Ας δούμε σε παραδείγματα.
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε γράμμα από
'a' έως 'z':
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε γράμμα από
'a' έως 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! xmx x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε γράμμα από
'A' έως 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'xax ! xcx x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε ψηφίο από 0
έως 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'xax ! ! ! x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε ψηφίο από 3
έως 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'xax x1x ! ! x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε γράμμα από
'a' έως 'z' ή ψηφίο από
1 έως 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! ! x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε γράμμα από
'a' έως 'z' ή γράμμα από
'A' έως 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! x5x x@x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x οποιοδήποτε γράμμα από
'a' έως 'z' ή τα ψηφία 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! ! x3x'
Παράδειγμα
Σε αυτό το παράδειγμα, το μοτίβο αναζήτησης μοιάζει
έτσι: μεταξύ των x γράμματα από 'a'
έως 'z' σε ποσότητα από 1 και
περισσότερα:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'xx ! ! ! x123x xa3x'
Παράδειγμα
Ας κάνουμε έτσι ώστε ο αριθμός των γραμμάτων να μπορεί να είναι και μηδέν:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Στο αποτέλεσμα θα πάρουμε:
'! ! ! ! x123x xa3x'
Παράδειγμα
Μέσα στις αγκύλες μπορείτε επίσης να καθορίσετε χαρακτήρες διαφυγής. Ας βρούμε μια ακολουθία γραμμάτων και ψηφίων, που επαναλαμβάνεται μηδέν ή περισσότερες φορές:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! x@x ! ! !'
Παράδειγμα
Εάν πρέπει να καθορίσουμε άλλες αγκύλες, τότε πρέπει επίσης οπωσδήποτε να τις αποφύγουμε:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! x3x'
Πρακτικά προβλήματα
Δίνεται μια συμβολοσειρά:
txt = 'aba aea aca aza axa'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - το γράμμα 'b',
'e' ή 'x'.
Δίνεται μια συμβολοσειρά:
txt = 'a1a a3a a7a a9a aba'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - ψηφίο από
3 έως 6.
Δίνεται μια συμβολοσειρά:
txt = 'aba aea afa aha aga'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - γράμμα από
'a' έως 'g'.
Δίνεται μια συμβολοσειρά:
txt = 'aba aea afa aha aga'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - γράμμα από
'a' έως 'f' και από 'j'
έως 'z'.
Δίνεται μια συμβολοσειρά:
txt = 'aAa aea aEa aJa a3a'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - γράμμα από
'a' έως 'f' και από 'A'
έως 'D'.
Δίνεται μια συμβολοσειρά:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - μικρά
λατινικά γράμματα, χωρίς να θίξει τα υπόλοιπα.
Δίνεται μια συμβολοσειρά:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - μικρά και
κεφαλαία λατινικά γράμματα, χωρίς να θίξει
τα υπόλοιπα.
Δίνεται μια συμβολοσειρά:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Γράψτε μια κανονική έκφραση που θα βρει σύμφωνα
με το ακόλουθο μοτίβο: στα άκρα υπάρχουν γράμματα
'a', και ανάμεσά τους - μικρά
λατινικά γράμματα και ψηφία, χωρίς να θίξει
τα υπόλοιπα.