Εάν είστε προγραμματιστής, είναι πιθανό να γνωρίζετε ήδη ποιες είναι οι κανονικές εκφράσεις (regex). Τα μοτίβα Regex έχουν εφαρμοστεί σχεδόν σε όλες τις βασικές γλώσσες προγραμματισμού, ωστόσο, η ισχύς και η ευελιξία αυτών των μοτίβων δεν αναγνωρίζονται από τους περισσότερους προγραμματιστές.
Αυτός ο οδηγός αφορά τακτικές εκφράσεις και πώς μπορείτε να τις χρησιμοποιήσετε στη γλώσσα προγραμματισμού Python.
Τι είναι οι τυπικές εκφράσεις;
Οι κανονικές εκφράσεις είναι μοτίβα που βοηθούν έναν χρήστη να ταιριάζει με τους συνδυασμούς χαρακτήρων σε αρχεία κειμένου και συμβολοσειρές. Μπορείτε να χρησιμοποιήσετε κανονικές εκφράσεις για να φιλτράρετε ή να βρείτε ένα συγκεκριμένο μοτίβο στην έξοδο μιας εντολής ή ενός εγγράφου.
Υπάρχουν διάφορες περιπτώσεις χρήσης τυπικών εκφράσεων, το πιο γνωστό ον η εντολή grep στο Linux. Άλλες εφαρμογές περιλαμβάνουν φιλτράρισμα πληροφοριών, όπως εξαγωγή διευθύνσεων email και αριθμών τηλεφώνου από μια απόρριψη δεδομένων.
Ο κύριος λόγος για τον οποίο πολλοί προγραμματιστές απομακρύνονται από τις κανονικές εκφράσεις είναι η έλλειψη συνειδητοποίησης σχετικά με τη δύναμη της αντιστοίχισης μοτίβων. Μερικοί βρίσκουν ακόμη και τις κανονικές εκφράσεις που προκαλούν σύγχυση λόγω του μεγάλου αριθμού χαρακτήρων και ακολουθιών που χρησιμοποιούνται στα μοτίβα.
Όποιος και αν είναι ο λόγος, οι τακτικές εκφράσεις είναι και θα είναι μια από τις πιο σημαντικές πτυχές του προγραμματισμού για τις οποίες όλοι πρέπει να γνωρίζουν.
Κανονικές εκφράσεις: Ταίριασμα χαρακτήρων και ακολουθιών
Το Regex είναι μια εντελώς νέα γλώσσα από μόνη της. Ένας κινητήρας regex ερμηνεύει μοτίβα που αποτελούνται από διάφορους χαρακτήρες εξοπλισμένους με συγκεκριμένες έννοιες. Βασικά γράμματα όπως αλφαριθμητικοί χαρακτήρες ταιριάζουν. Αλλά περίπλοκοι χαρακτήρες όπως $, *, +, {, κ.λπ. βοήθεια για αντιστοίχιση υψηλότερης τάξης.
- Αστερίσκος (*): Ταιριάζει με τον προηγούμενο χαρακτήρα μηδέν ή περισσότερες φορές. Η κυριολεκτική έννοια του χαρακτήρα θα είναι "Στοιχείο πολλαπλασιασμένο n φορές". Για παράδειγμα, εάν η κανονική έκφραση είναι αλφάβητο*, οι αντιστοιχισμένες συμβολοσειρές θα είναι ab, abc, abcc, abccc, abcccc, κ.λπ. Η έκφραση [προ ΧΡΙΣΤΟΥ]* θα ταιριάζει με τα bc, bcbc, bcbc, κ.λπ.
- Συν (+): Ταιριάζει με τον προηγούμενο χαρακτήρα μία ή περισσότερες φορές. Η εργασία του + ο χαρακτήρας είναι παρόμοιος με *, αλλά το + ο χαρακτήρας παραλείπει το μοτίβο εάν ο χαρακτήρας δεν εμφανίζεται. Για παράδειγμα, abc + θα ταιριάζει με abc, abcc, abccc, κ.λπ. αλλά όχι αβ.
- Ερωτηματικό (?): Ταιριάζει με τον προηγούμενο χαρακτήρα μηδέν ή μία φορά. Για παράδειγμα, το μοτίβο αλφάβητο? θα ταιριάζει μόνο με ab και abc.
- Σωλήνας (|): Χρησιμοποιείται ως δυαδικό Ή χειριστής. Ταιριάζει με οποιονδήποτε από τους χαρακτήρες που προηγούνται και διαδέχονται τον πίνακα. Για παράδειγμα, α | β θα ταιριάζει είτε a ή b.
- Τελεία (.): Ταιριάζει με έναν χαρακτήρα του οποίου η ταυτότητα είναι άγνωστη. Για παράδειγμα, μετα Χριστον θα ταιριάζει με aac, abc, acc, a2c και ούτω καθεξής.
- Καρότο (^): Ταιριάζει με τον πρώτο χαρακτήρα στο μοτίβο. Για παράδειγμα, ^ Ρα θα ταιριάζει με λέξεις που ξεκινούν με Ρα όπως κουνέλι, ρακούν και τυχαία.
- Δολάριο ($): Ταιριάζει με τον τελευταίο χαρακτήρα στο μοτίβο. Για παράδειγμα, ένα $ θα ταιριάζει με λέξεις που τελειώνουν με ένα όπως οι Van, Dan και Plan.
- Παύλα (-): Χρησιμοποιείται για τον καθορισμό ενός εύρους χαρακτήρων. Για παράδειγμα, [0-9] θα ταιριάζει με όλους τους μονοψήφιους αριθμητικούς χαρακτήρες.
Οι ειδικές ακολουθίες που χρησιμοποιούνται σε κανονικά μοτίβα έκφρασης είναι:
- \ΕΝΑ: Επιστρέφει έναν αγώνα εάν οι επόμενοι χαρακτήρες υπάρχουν στην αρχή της συμβολοσειράς. Για παράδειγμα, \ Ατά θα ταιριάζει με λέξεις που ξεκινούν με το ο όπως The, Them, They, κ.λπ.
- \σι: Επιστρέφει έναν αγώνα αν ο χαρακτήρας βρεθεί είτε στην αρχή είτε στο τέλος μιας λέξης. Για παράδειγμα, \ bmad και τρελός \ b θα ταιριάζει με λέξεις όπως έκανε και νομάς αντίστοιχα.
- \ΣΙ: Επιστρέφει έναν αγώνα αν ο χαρακτήρας δεν βρεθεί στην αρχή ή στο τέλος μιας λέξης.
- \ρε: Ταιριάζει με αριθμητικούς χαρακτήρες που υπάρχουν στη συμβολοσειρά. Για παράδειγμα, /d* θα ταιριάζει με αριθμούς όπως 1, 12, 1232 κ.λπ.
- \ΡΕ: Ταιριάζει με μη αριθμητικούς χαρακτήρες στη συμβολοσειρά. /ΡΕ θα ταιριάζει με a, b, c, f, κλπ.
- \μικρό: Ταιριάζει με έναν χαρακτήρα κενού στο κείμενο.
- \ΜΙΚΡΟ: Ταιριάζει με έναν χαρακτήρα χωρίς κενό διάστημα στο κείμενο.
- \ w: Επιστρέφει μια αντιστοίχιση εάν η συμβολοσειρά περιέχει αλφαριθμητικούς χαρακτήρες συμπεριλαμβανομένων των κάτω παύλων. Για παράδειγμα, \ μ θα ταιριάζει με a, b, c, d, 1, 2, 3 κ.λπ.
- \ Δ: Επιστρέφει έναν αγώνα εάν η συμβολοσειρά δεν περιέχει αλφαριθμητικούς χαρακτήρες ή κάτω παύλες.
- \ Ζ: Ταιριάζει με τους χαρακτήρες στο τέλος μιας συμβολοσειράς. Για παράδειγμα, τέλος \ Z θα ταιριάζει με λέξεις που τελειώνουν με τέλος όπως κάμψη, επιδιόρθωση, τάση κ.λπ.
Μέθοδοι Python για κανονικές εκφράσεις
Στο Python, το σχετικά με Η βιβλιοθήκη παρέχει όλες τις απαραίτητες λειτουργίες και βοηθητικά προγράμματα που απαιτούνται για την εφαρμογή του regex στα προγράμματά σας. Δεν χρειάζεται να κατεβάσετε τη βιβλιοθήκη χρησιμοποιώντας το pip καθώς έρχεται προεγκατεστημένο με τον διερμηνέα Python.
Για να εισαγάγετε το σχετικά με βιβλιοθήκη στο Python, προσθέστε τον ακόλουθο κώδικα στο σενάριό σας:
εισαγωγή re
Σημειώστε ότι ενώ περνάμε κανονικές εκφράσεις στο Python, χρησιμοποιούμε πρωτογενείς συμβολοσειρές καθώς δεν ερμηνεύουν ειδικούς χαρακτήρες όπως \ n και \ τ διαφορετικά.
Αγώνας()
ο εκ νέου αντιστοιχία () Η μέθοδος στο Python επιστρέφει ένα αντικείμενο regex εάν το πρόγραμμα εντοπίσει έναν αγώνα στην αρχή της καθορισμένης συμβολοσειράς. Αυτή η συνάρτηση περιλαμβάνει δύο βασικά ορίσματα:
re.match (μοτίβο, συμβολοσειρά)
...όπου πρότυπο είναι η κανονική έκφραση και σειρά είναι το κείμενο που πρέπει να αναζητηθεί.
Ρίξτε μια ματιά στο απόσπασμα κώδικα παρακάτω.
εισαγωγή re
match = re.match (r'Word ', "Αυτή η πρόταση περιέχει μια λέξη")
εκτύπωση (ταίριασμα)
ο ρ χαρακτήρας πριν από τη συμβολοσειρά σημαίνει ακατέργαστη συμβολοσειρά.
Παραγωγή:
Κανένας
Επιστρέφεται ο προαναφερθείς κωδικός Κανένας επειδή Λέξη δεν υπήρχε στην αρχή της συμβολοσειράς.
Εάν βρεθεί κάποιος αγώνας, μπορείτε να εκτυπώσετε τον αγώνα χρησιμοποιώντας το ομάδα() μέθοδος που ανήκει στο αντικείμενο regex.
εισαγωγή re
match = re.match (r'Word ', "Η λέξη είναι δύσκολο να διαβαστεί")
εκτύπωση (match.group (0))
Παραγωγή:
Λέξη
Αναζήτηση()
ο έρευνα() Η μέθοδος παίρνει παρόμοια ορίσματα με το re.match (). Ενώ ο αγώνας () επιστρέφει μόνο αγώνες που υπάρχουν στην αρχή της συμβολοσειράς, Αναζήτηση() θα επιστρέψει αγώνες που βρέθηκαν σε οποιοδήποτε ευρετήριο της συμβολοσειράς.
εισαγωγή re
match = re.search (r'Word ', "Αυτή η πρόταση περιέχει ένα Word. Η λέξη είναι δύσκολο να διαβαστεί. ")
εκτύπωση (match.group (0))
Σημειώστε ότι το αγώνας() και Αναζήτηση() οι μέθοδοι θα επιστρέψουν μόνο έναν αγώνα μοτίβου. Στον παραπάνω κωδικό, Λέξη εμφανίζεται δύο φορές. Αλλά το Αναζήτηση() Η συνάρτηση θα ταιριάζει μόνο με την πρώτη εμφάνιση της λέξης.
Λέξη
Εύρεση όλων ()
Όπως μπορείτε ήδη να μαντέψετε, το εύρεση () Η μέθοδος επιστρέφει κάθε πιθανό ταίριασμα στη συμβολοσειρά.
εισαγωγή re
match = re.search (r'Word ', "Αυτή η πρόταση περιέχει ένα Word. Η λέξη είναι δύσκολο να διαβαστεί. ")
για elem στον αγώνα:
εκτύπωση (elem)
Αντί να επιστρέφει ένα αντικείμενο regex, η συνάρτηση findall () επιστρέφει μια λίστα με όλους τους αγώνες. Μπορείτε να επαναλάβετε τη λίστα χρησιμοποιώντας ένα για βρόχο στο python.
Διαίρεση()
Εάν θέλετε να χωρίσετε μια συμβολοσειρά σε υπο-συμβολοσειρές χρησιμοποιώντας ένα μοτίβο ως οριοθέτη, τότε το διαίρεση() η λειτουργία είναι αυτή που χρειάζεστε.
εισαγωγή re
split = re.split (r'and ', "Αυτή η λέξη και αυτό και αυτό είναι διαφορετικό.")
εκτύπωση (split)
Παραγωγή:
['Αυτή η λέξη "," ότι "," αυτό είναι διαφορετικό. "]
Υπο()
ο υπο() Η μέθοδος επιτρέπει στον χρήστη να αντικαταστήσει μια συγκεκριμένη λέξη στη θέση ενός μοτίβου. Χρειάζεται τα ακόλουθα επιχειρήματα.
re.sub (μοτίβο, αντικατάσταση, συμβολοσειρά)
Εξετάστε αυτό το απόσπασμα κώδικα:
εισαγωγή re
result = re.sub (r'and ',' ή ', "Ο Dave και ο Χάρι πρέπει να τιμωρηθούν.")
εκτύπωση (αποτέλεσμα)
Παραγωγή:
Ο Ντέιβ ή ο Χάρι πρέπει να τιμωρηθούν.
Συντάσσω()
ο re.compile () μέθοδος στο σχετικά με Η βιβλιοθήκη επιτρέπει στον χρήστη να αποθηκεύει μια μεταγλωττισμένη έκδοση του μοτίβου κανονικής έκφρασης στη μνήμη. Στη συνέχεια, χρησιμοποιώντας το μεταγλωττισμένο αντικείμενο, ο χρήστης μπορεί να φιλτράρει γρήγορα την καθορισμένη ένδειξη κειμένου για ταιριαστά μοτίβα.
εισαγωγή re
pattern = re.compile («Python»)
match = pattern.findall ("Η Python είναι μια εξαιρετική γλώσσα για τη συγγραφή σεναρίων. Η Python είναι εύκολο να μάθει. ")
εκτύπωση (ταίριασμα)
Αυτή η λειτουργία χρησιμοποιείται κυρίως για την εξοικονόμηση μοτίβων που απαιτούν πολλούς πόρους και χρειάζονται πολύ χρόνο για να εκτελεστούν. Η μεταγλώττιση και η αποθήκευση του μοτίβου ως αντικειμένου επιλύει αυτό το ζήτημα.
Αξιοποιήστε τη δύναμη του Regex με τον Python
Όταν εργάζεστε με αρχεία κειμένου και έξοδο, το regex είναι ένα εξαιρετικό εργαλείο που έχετε στη διάθεσή σας. Μπορείτε γρήγορα να γράψετε κάποιον κώδικα για να φιλτράρετε ή να αντικαταστήσετε συγκεκριμένα μοτίβα στο έγγραφο.
Η απομνημόνευση όλων των χαρακτήρων και των αντίστοιχων ακολουθιών μπορεί να είναι δύσκολη αν ξεκινάτε απλώς με regex. Για να βελτιωθείτε σε κανονικές εκφράσεις, αναφερόμενος σε μια λίστα χαρακτήρων, μεθόδων και ακολουθιών κάθε τόσο και μετά θα σας βοηθήσει σίγουρα μακροπρόθεσμα.
Χρησιμοποιήστε αυτήν τη λίστα κανονικών εκφράσεων Python, ώστε να μπορείτε να βελτιώσετε τη χρήση αυτής της ευέλικτης γλώσσας προγραμματισμού.
Διαβάστε Επόμενο
- Προγραμματισμός
- Προγραμματισμός
- Πύθων
Ο Deepesh είναι ο Junior Editor για Linux στο MUO. Γράφει ενημερωτικό περιεχόμενο στο Διαδίκτυο για πάνω από 3 χρόνια. Στον ελεύθερο χρόνο του, του αρέσει να γράφει, να ακούει μουσική και να παίζει κιθάρα.
Εγγραφείτε στο Newsletter μας
Εγγραφείτε στο ενημερωτικό δελτίο μας για τεχνικές συμβουλές, κριτικές, δωρεάν ebook και αποκλειστικές προσφορές!
Ένα ακόμη βήμα…!
Επιβεβαιώστε τη διεύθυνση email σας στο email που μόλις σας στείλαμε.