Ο αρχικός οδηγός για τις κανονικές εκφράσεις με την Python

Ο αρχικός οδηγός για τις κανονικές εκφράσεις με την Python

Εάν είστε προγραμματιστής, το πιθανότερο είναι ότι γνωρίζετε ήδη τι είναι οι κανονικές εκφράσεις (regex). Τα μοτίβα Regex έχουν εφαρμοστεί σε σχεδόν όλες τις συνηθισμένες γλώσσες προγραμματισμού, αλλά παρόλα αυτά, η δύναμη και η ευελιξία αυτών των προτύπων δεν αναγνωρίζονται από τους περισσότερους προγραμματιστές.





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





Τι είναι οι τακτικές εκφράσεις;

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





Υπάρχουν διάφορες περιπτώσεις χρήσης κανονικών εκφράσεων, η πιο γνωστή είναι η εντολή grep στο Linux Το Άλλες εφαρμογές περιλαμβάνουν φιλτράρισμα πληροφοριών, όπως εξαγωγή διευθύνσεων email και αριθμών τηλεφώνου από μια χωματερή δεδομένων.

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



Όποιος και αν είναι ο λόγος, οι τακτικές εκφράσεις είναι και θα είναι μία από τις πιο σημαντικές πτυχές του προγραμματισμού που όλοι πρέπει να γνωρίζουν.

τι ειναι το volte στο κινητο μου

Κανονικές εκφράσεις: Αντιστοίχιση χαρακτήρων και ακολουθιών

Το Regex είναι μια εντελώς νέα γλώσσα από μόνο του. Ένας κινητήρας regex ερμηνεύει μοτίβα που αποτελούνται από διάφορους χαρακτήρες εξοπλισμένους με συγκεκριμένες έννοιες. Βασικές κυριολεκτικές λέξεις όπως αλφαριθμητικοί χαρακτήρες ταιριάζουν με τον εαυτό τους. Αλλά σύνθετοι χαρακτήρες όπως $, *, +, {, κ.λπ. βοηθούν στην αντιστοίχιση υψηλότερης τάξης.





  1. Αστερίσκος (*): Ταιριάζει με τον προηγούμενο χαρακτήρα μηδέν ή περισσότερες φορές. Η κυριολεκτική έννοια του χαρακτήρα θα ήταν «Στοιχείο πολλαπλασιασμένο n φορές». Για παράδειγμα, αν η κανονική έκφραση είναι abc * , οι συμβολοσειρές που αντιστοιχίζονται θα είναι ab, abc, abcc, abccc, abcccc κ.λπ. Η έκφραση [προ ΧΡΙΣΤΟΥ]* θα ταιριάζει με bc, bcbc, bcbc κ.λπ.
  2. Περισσότερα (+): Ταιριάζει με τον προηγούμενο χαρακτήρα μία ή περισσότερες φορές. Η λειτουργία του + ο χαρακτήρας είναι παρόμοιος με * , αλλά το + ο χαρακτήρας παραλείπει το μοτίβο εάν ο χαρακτήρας δεν εμφανιστεί. Για παράδειγμα, abc + θα ταιριάζει με abc, abcc, abccc κ.λπ. αλλά όχι με ab.
  3. Ερωτηματικό (?): Ταιριάζει με τον προηγούμενο χαρακτήρα μηδέν ή μία φορά. Για παράδειγμα, το μοτίβο αλφάβητο? θα ταιριάζει μόνο με ab και abc.
  4. Σωλήνας (|): Χρησιμοποιείται ως δυαδικό Ή χειριστής. Ταιριάζει με οποιονδήποτε από τους χαρακτήρες που προηγούνται και διαδέχονται το σωλήνα. Για παράδειγμα, α | β θα ταιριάζει είτε με το α είτε με το β.
  5. Τελεία (.): Ταιριάζει με έναν χαρακτήρα του οποίου η ταυτότητα είναι άγνωστη. Για παράδειγμα, μετα Χριστον θα ταιριάζει με aac, abc, acc, a2c κ.ο.κ.
  6. Καρότο (^): Ταιριάζει με τον πρώτο χαρακτήρα στο μοτίβο. Για παράδειγμα, ^Ρα θα ταιριάζει με τις λέξεις που ξεκινούν με Εξω όπως το Rabbit, Raccoon και Random.
  7. Δολάριο ($): Ταιριάζει με τον τελευταίο χαρακτήρα στο μοτίβο. Για παράδειγμα, ένα $ θα ταιριάζει με τις λέξεις που τελειώνουν με ένα όπως Van, Dan και Plan.
  8. Παύλα (-): Χρησιμοποιείται για τον καθορισμό ενός εύρους χαρακτήρων. Για παράδειγμα, [0-9] θα ταιριάζει με όλους τους μονοψήφιους αριθμητικούς χαρακτήρες.

Οι ειδικές ακολουθίες που χρησιμοποιούνται σε κανονικά μοτίβα έκφρασης είναι:

  1. ΠΡΟΣ ΤΟ: Επιστρέφει μια αντιστοίχιση εάν οι επόμενοι χαρακτήρες είναι παρόντες στην αρχή της συμβολοσειράς. Για παράδειγμα, ΑΘΕ θα ταιριάξει με τις λέξεις που ξεκινούν με το ο όπως The, Them, They κ.λπ.
  2. b: Επιστρέφει μια αντιστοίχιση εάν ο χαρακτήρας βρίσκεται είτε στην αρχή είτε στο τέλος μιας λέξης. Για παράδειγμα, bmad και τρελός β θα ταιριάζει με λέξεις όπως π.χ. έκανε και νομάς αντίστοιχα.
  3. Β: Επιστρέφει μια αντιστοίχιση εάν ο χαρακτήρας δεν βρίσκεται στην αρχή ή στο τέλος μιας λέξης.
  4. ρε: Ταιριάζει με αριθμητικούς χαρακτήρες που υπάρχουν στη συμβολοσειρά. Για παράδειγμα, /ρε* θα ταιριάζει με αριθμούς όπως 1, 12, 1232 κ.λπ.
  5. ΡΕ: Ταιριάζει με μη αριθμητικούς χαρακτήρες στη συμβολοσειρά. /ΡΕ θα ταιριάζει με τα a, b, c, f κ.λπ.
  6. μικρό: Αντιστοιχεί σε έναν κενό χώρο στο κείμενο.
  7. ΜΙΚΡΟ: Ταιριάζει με έναν χαρακτήρα μη λευκού χώρου στο κείμενο.
  8. σε: Επιστρέφει μια αντιστοίχιση εάν η συμβολοσειρά περιέχει αλφαριθμητικούς χαρακτήρες, συμπεριλαμβανομένων των υπογράμμισης. Για παράδειγμα, σε θα ταιριάζει με a, b, c, d, 1, 2, 3 κ.λπ.
  9. ΣΕ: Επιστρέφει μια αντιστοίχιση εάν η συμβολοσειρά δεν περιέχει αλφαριθμητικούς χαρακτήρες ή υπογράμμιση.
  10. ΜΕ: Ταιριάζει με χαρακτήρες στο τέλος μιας συμβολοσειράς. Για παράδειγμα, τέλος Z θα ταιριάζει με τις λέξεις που τελειώνουν με τέλος όπως κάμψη, επιδιόρθωση, τάση κ.λπ.

Μέθοδοι Python για κανονικές εκφράσεις

Στην Python, το σχετικά με Η βιβλιοθήκη παρέχει όλες τις απαραίτητες λειτουργίες και βοηθητικά προγράμματα που απαιτούνται για την εφαρμογή του regex στα προγράμματά σας. Δεν χρειάζεται να κατεβάσετε τη βιβλιοθήκη χρησιμοποιώντας το pip καθώς έρχεται προεγκατεστημένο με τον διερμηνέα Python.





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

import re

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

Αγώνας()

ο re.match () Η μέθοδος στην Python επιστρέφει ένα αντικείμενο regex εάν το πρόγραμμα βρει μια αντιστοίχιση στην αρχή της καθορισμένης συμβολοσειράς. Αυτή η συνάρτηση παίρνει δύο βασικά επιχειρήματα:

re.match(pattern, string)

...όπου πρότυπο είναι η κανονική έκφραση και σειρά είναι το κείμενο που πρέπει να αναζητηθεί.

Ρίξτε μια ματιά στο απόσπασμα κώδικα παρακάτω.

import re
match = re.match(r'Word', 'This sentence contains a Word')
print(match)

ο ρ χαρακτήρας πριν από τη συμβολοσειρά σημαίνει ακατέργαστη συμβολοσειρά.

Παραγωγή:

None

Ο προαναφερθείς κώδικας επιστρέφει Κανένας επειδή Λέξη δεν ήταν παρών στην αρχή της χορδής.

Εάν βρεθεί αντιστοίχιση, μπορείτε να εκτυπώσετε την αντιστοίχιση χρησιμοποιώντας το ομάδα() μέθοδο που ανήκει στο αντικείμενο regex.

import re
match = re.match(r'Word', 'Word is hard to read')
print(match.group(0))

Παραγωγή:

Word

ο re.search () Η μέθοδος λαμβάνει παρόμοια ορίσματα με το re.match (). Ενώ η αντιστοίχιση () επιστρέφει μόνο αντιστοιχίες που υπάρχουν στην αρχή της συμβολοσειράς, Αναζήτηση() θα επιστρέψει αντιστοιχίσεις που βρέθηκαν σε οποιοδήποτε ευρετήριο της συμβολοσειράς.

import re
match = re.search(r'Word', 'This sentence contains a Word. Word is hard to read.')
print(match.group(0))

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

Word

FindAll ()

Όπως μπορείτε ήδη να μαντέψετε, το findall () η μέθοδος επιστρέφει κάθε πιθανή αντιστοίχιση στη συμβολοσειρά.

import re
match = re.search(r'Word', 'This sentence contains a Word. Word is hard to read.')
for elem in match:
print(elem)

Αντί να επιστρέψει ένα αντικείμενο regex, η συνάρτηση findall () επιστρέφει μια λίστα με όλες τις αντιστοιχίσεις. Μπορείτε να επαναλάβετε τη λίστα χρησιμοποιώντας ένα για βρόχο στον πύθωνα Το

Διαίρεση()

Εάν θέλετε να χωρίσετε μια συμβολοσειρά σε υπο-συμβολοσειρές χρησιμοποιώντας ένα μοτίβο ως οριοθέτη, τότε το διαίρεση() η λειτουργία είναι αυτή που χρειάζεστε.

import re
split = re.split(r'and', 'This word and that and this are different.')
print(split)

Παραγωγή:

['This word', 'that', 'this are different.']

Υπο()

ο υπο() Η μέθοδος επιτρέπει στον χρήστη να αντικαταστήσει μια συγκεκριμένη λέξη στη θέση ενός μοτίβου. Παίρνει τα ακόλουθα επιχειρήματα.

re.sub(pattern, replacement, string)

Εξετάστε αυτό το απόσπασμα κώδικα:

import re
result = re.sub(r'and', 'or', 'Dave and Harry must be punished.')
print(result)

Παραγωγή:

Dave or Harry must be punished.

Συντάσσω()

ο re.compile () μέθοδο στο σχετικά με Η βιβλιοθήκη επιτρέπει στον χρήστη να αποθηκεύσει μια μεταγλωττισμένη έκδοση του κανονικού μοτίβου έκφρασης στη μνήμη. Στη συνέχεια, χρησιμοποιώντας το μεταγλωττισμένο αντικείμενο, ο χρήστης μπορεί να φιλτράρει γρήγορα την καθορισμένη χωματερή κειμένου για αντιστοιχισμένα μοτίβα.

import re
pattern = re.compile('Python')
match = pattern.findall('Python is a great language for writing scripts. Python is easy to learn.')
print(match)

Αυτή η λειτουργία χρησιμοποιείται κυρίως για την αποθήκευση μοτίβων που απαιτούν ένταση πόρων και χρειάζονται πολύ χρόνο για να εκτελεστούν. Η σύνταξη και αποθήκευση του μοτίβου ως αντικειμένου εκ των προτέρων λύνει αυτό το ζήτημα.

Αξιοποιήστε τη δύναμη του Regex με την Python

Όταν εργάζεστε με αρχεία κειμένου και έξοδο, το regex είναι ένα εξαιρετικό εργαλείο που έχετε στη διάθεσή σας. Μπορείτε να γράψετε γρήγορα κάποιον κώδικα για να φιλτράρετε ή να αντικαταστήσετε συγκεκριμένα μοτίβα στο έγγραφο.

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

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Το Python RegEx Cheat Sheet για Budding Programmers

Χρησιμοποιήστε αυτήν τη λίστα κανονικών εκφράσεων Python, ώστε να μπορείτε να βελτιώσετε τη χρήση αυτής της ευέλικτης γλώσσας προγραμματισμού.

Διαβάστε Επόμενο
Σχετικά θέματα
  • Προγραμματισμός
  • Προγραμματισμός
  • Πύθων
Σχετικά με τον Συγγραφέα Deepesh Sharma(79 άρθρα δημοσιεύθηκαν)

Ο Deepesh είναι ο Junior Editor για Linux στο MUO. Γράφει ενημερωτικούς οδηγούς στο Linux, με στόχο να προσφέρει μια ευχάριστη εμπειρία σε όλους τους νεοεισερχόμενους. Δεν είμαι σίγουρος για τις ταινίες, αλλά αν θέλετε να μιλήσετε για την τεχνολογία, είναι ο τύπος σας. Στον ελεύθερο χρόνο του, μπορείτε να τον βρείτε να διαβάζει βιβλία, να ακούει διαφορετικά είδη μουσικής ή να παίζει κιθάρα.

Περισσότερα από Deepesh Sharma

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή