Ομάδες χαρακτήρων στις κανονικές εκφράσεις της Python
Υπάρχουν ειδικές εντολές που
επιτρέπουν την επιλογή αμέσως ολόκληρων ομάδων
χαρακτήρων. Η εντολή \d σημαίνει ψηφίο
από 0 έως 9. Η εντολή \w
δηλώνει ψηφίο, λατινικό γράμμα ή τον χαρακτήρα
υπογράμμισης. Η εντολή \s δηλώνει
κενό ή χαρακτήρα κενού: κενό,
αλλαγή γραμμής, ταμπουλάρισμα. Μπορείτε να αντιστρέψετε
την τιμή της εντολής, γράφοντας κεφαλαίο γράμμα:
για παράδειγμα, εάν \d - ψηφίο, τότε
\D - όχι ψηφίο.
Παράδειγμα
Ας βρούμε όλα τα ψηφία:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! !! !!!'
Παράδειγμα
Οι τελεστές επανάληψης θεωρούν τις εντολές-ομάδες
ως ένα σύνολο, δηλαδή οι ομαδοποιητικές αγκύλες
δεν είναι απαραίτητες. Στο επόμενο παράδειγμα το μοτίβο αναζήτησης
φαίνεται ως εξής: ψηφίο από 0 έως
9 μία ή περισσότερες φορές:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! abc @@@'
Παράδειγμα
Στο επόμενο παράδειγμα το μοτίβο αναζήτησης φαίνεται
ως εξής: οτιδήποτε μία ή περισσότερες φορές,
αλλά όχι ψηφίο από 0 έως 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'123!3!'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται ως εξής: χαρακτήρας κενού μία φορά:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'1!12!123!abc!@@@'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται
ως εξής: ΟΧΙ χαρακτήρας κενού μία ή περισσότερες
φορές. Όλες οι υποσυμβολοσειρές, που χωρίζονται
με κενά, θα αντικατασταθούν με '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! ! !'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται
ως εξής: ψηφίο ή γράμμα μία ή περισσότερες
φορές. Όλες οι υποσυμβολοσειρές, που αποτελούνται από ψηφία
και γράμματα, θα αντικατασταθούν με '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! ! @@@'
Παράδειγμα
Σε αυτό το παράδειγμα το μοτίβο αναζήτησης φαίνεται
ως εξής: ΟΧΙ ψηφίο και ΟΧΙ γράμμα μία ή περισσότερες
φορές. Στην περίπτωσή μας
ταιριάζει το '@@@' και όλα τα κενά
(αφού και αυτά δεν είναι ψηφία ούτε γράμματα).
Παρατηρήστε ότι στο τέλος υπάρχει ένα
'!' - σε αυτό μετατράπηκε η συμβολοσειρά
' @@@' - με κενό μπροστά:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'1!12!123!Abc!'
Πρακτικά προβλήματα
Δίνεται συμβολοσειρά:
txt = 'a1a a2a a3a a4a a5a aba aca'
Γράψτε μια κανονική έκφραση, που θα βρει συμβολοσειρές,
στις οποίες στα άκρα υπάρχουν γράμματα 'a',
και ανάμεσά τους ένα ψηφίο.
Δίνεται συμβολοσειρά:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Γράψτε μια κανονική έκφραση, που θα βρει συμβολοσειρές,
στις οποίες στα άκρα υπάρχουν γράμματα 'a',
και ανάμεσά τους οποιοσδήποτε αριθμός ψηφίων.
Δίνεται συμβολοσειρά:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Γράψτε μια κανονική έκφραση, που θα βρει συμβολοσειρές,
στις οποίες στα άκρα υπάρχουν γράμματα 'a',
και ανάμεσά τους οποιοσδήποτε αριθμός ψηφίων (συμπεριλαμβανομένου
και του μηδενός ψηφίων, δηλαδή η συμβολοσειρά
'aa').
Δίνεται συμβολοσειρά:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Γράψτε μια κανονική έκφραση, που θα βρει συμβολοσειρές
του ακόλουθου τύπου: στα άκρα υπάρχουν γράμματα
'a' και 'b', και ανάμεσά τους -
όχι αριθμός και όχι κενό.
Δίνεται συμβολοσειρά:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Γράψτε μια κανονική έκφραση, που θα βρει συμβολοσειρές
του ακόλουθου τύπου: στα άκρα υπάρχουν γράμματα
'a' και 'b', και ανάμεσά τους -
όχι γράμμα, όχι ψηφίο και όχι κενό.
Δίνεται συμβολοσειρά:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Γράψτε μια κανονική έκφραση, που θα αντικαταστήσει όλα
τα κενά με '!'.