Σημαίες για συμβολοσειρές κανονικών εκφράσεων στην Python
Για να ορίσετε σημαίες ως μία από τις προαιρετικές παραμέτρους για τις μεθόδους που λειτουργούν με κανονικές εκφράσεις, χρησιμοποιείται η ακόλουθη σύνταξη:
flags=re.όνομα σημαίας
Κύριες σημαίες για εργασία με κανονικές εκφράσεις
| Σημαία | Σκοπός |
|---|---|
re.IGNORECASE |
Αγνόηση πεζών/κεφαλαίων γραμμάτων. |
re.DOTALL |
Η τελεία υποδηλώνει οποιοδήποτε χαρακτήρα, συμπεριλαμβανομένης και της αλλαγής γραμμής. |
re.I |
Κάνει την αναζήτηση αδιάφορη προς τα πεζά/κεφαλαία. |
re.L |
Αναζητά λέξεις σύμφωνα με την τρέχουσα γλώσσα.
Αυτή η ερμηνεία αφορά την αλφαβητική
ομάδα (\w και \W), καθώς και
τη συμπεριφορά του ορίου λέξης (\b και
\B).
|
re.M |
Ο χαρακτήρας $ εκτελεί αναζήτηση στο τέλος
οποιασδήποτε γραμμής κειμένου (όχι μόνο στο τέλος του κειμένου)
και ο χαρακτήρας ^ εκτελεί αναζήτηση στην αρχή
οποιασδήποτε γραμμής κειμένου (όχι μόνο στην αρχή
του κειμένου).
|
re.S |
Αλλάζει την τιμή της τελείας (.) σε
ταιριάζει με οποιονδήποτε χαρακτήρα, συμπεριλαμβανομένης της νέας
γραμμής.
|
re.U |
Ερμηνεύει τα γράμματα σύμφωνα με το
σύνολο χαρακτήρων Unicode. Αυτή η σημαία επηρεάζει
τη συμπεριφορά των \w, \W, \b,
\B. Στην Python 3+ αυτή η σημαία
είναι ενεργοποιημένη από προεπιλογή.
|
re.X |
Επιτρέπει πολύγραμμη σύνταξη κανονικής
έκφρασης. Αγνοεί τα κενά μέσα στο
μοτίβο (εκτός από τα κενά μέσα σε ένα σύνολο
[] ή όταν διαφεύγουν με
ανάστροφη κάθετο) και αντιμετωπίζει τον μη
διαφυγμένο '#' ως σχόλιο.
|
Παράδειγμα
Με τη σημαία re.IGNORECASE μπορείτε να
αγνοήσετε τα πεζά/κεφαλαία γράμματα. Ας
δούμε πώς γίνεται αυτό. Σ αυτό το παράδειγμα
η κανονική έκφραση θα βρει μόνο τα πεζά γράμματα:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! CCC DDD'
Παράδειγμα
Και τώρα θα προσθέσουμε στην τέταρτη παράμετρο
της μεθόδου τη σημαία re.IGNORECASE και η κανονική έκφραση
θα αρχίσει να αναζητά χαρακτήρες σε όλα τα πεζά/κεφαλαία:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Αποτέλεσμα εκτέλεσης κώδικα:
'! ! ! !'
Παράδειγμα
Ας βρούμε με κανονική έκφραση όλες τις αλλαγές γραμμής:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Αποτέλεσμα εκτελεσμένου κώδικα:
'aaa!bbb'
Παράδειγμα
Όμως, εάν χρειαστεί να αντικαταστήσετε όλους τους χαρακτήρες, τότε βάζοντας μια τελεία στην κανονική έκφραση, δεν θα συμπεριληφθούν οι αλλαγές γραμμής:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Αποτέλεσμα εκτελεσμένου κώδικα:
'!!!
!!!'
Παράδειγμα
Για να διορθώσετε αυτό το σφάλμα, πρέπει
να εφαρμόσετε τη σημαία re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Αποτέλεσμα εκτελεσμένου κώδικα:
'!!!!!!!'
Παράδειγμα
Στην παράμετρο μπορούν να μεταβιβαστούν και πολλές
σημαίες, βάζοντας μεταξύ τους τον τελεστή +.
Ας αντικαταστήσουμε πρώτα το γράμμα 'a'
στο τέλος της γραμμής:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Αποτέλεσμα εκτελεσμένου κώδικα:
'''
aaa
AAA
!
'''
Παράδειγμα
Τώρα ας βάλουμε τη σημαία re.M:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Αποτέλεσμα εκτελεσμένου κώδικα:
'''
!
AAA
!
'''
Παράδειγμα
Ας εφαρμόσουμε τώρα και τη σημαία για αγνόηση πεζών/κεφαλαίων:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Αποτέλεσμα εκτελεσμένου κώδικα:
'''
!
!
!
'''