⊗pyPmREESCh 36 of 129 menu

Διαφυγή ειδικών χαρακτήρων στις κανονικές εκφράσεις της Python

Ας υποθέσουμε ότι θέλετε να κάνετε έναν ειδικό χαρακτήρα να αντιπροσωπεύει τον εαυτό του. Για αυτό πρέπει να του δώσετε διαφυγή χρησιμοποιώντας την ανάστροφη πλάγια παύλα. Ας δούμε μερικά παραδείγματα.

Παράδειγμα

Στο επόμενο παράδειγμα, ο συγγραφέας της κανονικής έκφρασης ήθελε το μοτίβο αναζήτησης να μοιάζει με αυτό: γράμμα 'a', μετά συν '+', μετά γράμμα 'x'. Ωστόσο, ο συγγραφέας του κώδικα δεν έδωσε διαφυγή στον χαρακτήρα '+' και επομένως το μοτίβο αναζήτησης στην πραγματικότητα μοιάζει με αυτό: γράμμα 'a' μία ή περισσότερες φορές, μετά γράμμα 'x':

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Αποτέλεσμα εκτέλεσης του κώδικα:

'a+x ! ! !'

Παράδειγμα

Τώρα ο συγγραφέας έδωσε διαφυγή στο συν με ανάστροφη πλάγια παύλα. Τώρα το μοτίβο αναζήτησης μοιάζει όπως πρέπει: γράμμα 'a', μετά συν '+', μετά γράμμα 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Αποτέλεσμα εκτέλεσης του κώδικα:

'! ax aax aaax'

Παράδειγμα

Σε αυτό το παράδειγμα, το μοτίβο μοιάζει με αυτό: γράμμα 'a', μετά τελεία '.', μετά γράμμα 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Αποτέλεσμα εκτέλεσης του κώδικα:

'! abx azx'

Παράδειγμα

Στο επόμενο παράδειγμα ο συγγραφέας ξέχασε να δώσει διαφυγή στην τελεία και η κανονική έκφραση πιάσει όλες τις υποσυμβολοσειρές, καθώς η τελεία χωρίς διαφυγή αντιπροσωπεύει οποιονδήποτε χαρακτήρα:

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Αποτέλεσμα εκτέλεσης του κώδικα:

'! ! !'

Παρατήρηση

Παρατηρήστε ότι αν ξεχάσετε την ανάστροφη πλάγια παύλα για την τελεία (όταν πρέπει να αντιπροσωπεύει τον εαυτό της) - αυτό μπορεί να μην το παρατηρήσετε καν:

res = re.sub('a.x', '!', 'a.x') print(res) # επιστρέφει '!', όπως θέλαμε

Οπτικά λειτουργεί σωστά (καθώς η τελεία αντιπροσωπεύει οποιονδήποτε χαρακτήρα, συμπεριλαμβανομένης και της κανονικής τελείας '.'). Αλλά αν αλλάξετε τη συμβολοσειρά στην οποία γίνονται οι αντικαταστάσεις - θα δούμε το λάθος μας:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # επιστρέφει '! ! !', αλλά αναμενόταν '! abx azx'

Κατάλογος ειδικών συμβόλων και συνηθισμένων

Αν δώσετε διαφυγή σε έναν συνηθισμένο χαρακτήρα - τίποτα κακό δεν θα συμβεί - θα συνεχίσει να αντιπροσωπεύει τον εαυτό του. Εξαίρεση - οι αριθμοί, δεν μπορούν να τους δοθεί διαφυγή.

Συχνά προκύπτει αμφιβολία για το αν ένας συγκεκριμένος χαρακτήρας είναι ειδικός. Μερικοί φτάνουν στο σημείο να δίνουν διαφυγή σε όλους τους ύποπτους χαρακτήρες ο ένας μετά τον άλλο. Ωστόσο, αυτή είναι κακή πρακτική (γεμίζει την κανονική έκφραση με ανάστροφες πλάγιες παύλες).

Είναι ειδικοί χαρακτήρες: $ ^ . * + ? \ / {} [] () |

Δεν είναι ειδικοί χαρακτήρες: @ : , ' " - _ = < > % # ~ `& !

Πρακτικές ασκήσεις

Δίνεται η συμβολοσειρά:

txt = 'a.a aba aea'

Γράψτε μια κανονική έκφραση που θα βρει τη συμβολοσειρά 'a.a', χωρίς να πιάσει τις υπόλοιπες.

Δίνεται η συμβολοσειρά:

txt = '2+3 223 2223'

Γράψτε μια κανονική έκφραση που θα βρει τη συμβολοσειρά '2+3', χωρίς να πιάσει τις υπόλοιπες.

Δίνεται η συμβολοσειρά:

txt = '23 2+3 2++3 2+++3 345 567'

Γράψτε μια κανονική έκφραση που θα βρει τις συμβολοσειρές '2+3', '2++3', '2+++3', χωρίς να πιάσει τις υπόλοιπες (+ μπορεί να είναι οποιοσδήποτε αριθμός).

Δίνεται η συμβολοσειρά:

txt = '23 2+3 2++3 2+++3 445 677'

Γράψτε μια κανονική έκφραση που θα βρει τις συμβολοσειρές '23', '2+3', '2++3', '2+++3', χωρίς να πιάσει τις υπόλοιπες.

Δίνεται η συμβολοσειρά:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Γράψτε μια κανονική έκφραση που θα βρει τις συμβολοσειρές '*q+', '*qq+', '*qqq+', χωρίς να πιάσει τις υπόλοιπες.

Δίνεται η συμβολοσειρά:

txt = '[abc] {abc} abc (abc) [abc]'

Γράψτε μια κανονική έκφραση που θα βρει τις συμβολοσειρές μέσα σε αγκύλες και θα τις αντικαταστήσει με '!'.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη