Python Regex Explained (2026)
Το Regex είναι το πιο τρομακτικό χαρακτηριστικό της Python. Δεν είναι τόσο δύσκολο — αλλά το 80% των σεμιναρίων φορτώνουν εκ των προτέρων τη θεωρία (\d, \w, άπληστοι εναντίον τεμπέλης) πριν σας δείξουν ένα μεμονωμένο μοτίβο που θα χρησιμοποιούσατε πραγματικά σε πραγματικό κώδικα. Αυτό το σεμινάριο ανατρέπει αυτό.
Θα καλύψουμε: τα βασικά της ενότητας «re», τα πέντε μοτίβα που καλύπτουν το 90% της πραγματικής εργασίας, όταν το «re.compile» βοηθά πραγματικά, ονομάζουμε ομάδες έναντι αριθμημένων και τις τέσσερις περιπτώσεις όπου το regex είναι το ΛΑΘΟΣ εργαλείο.
Η ενότητα σε 60 δευτερόλεπτα
Όλα ζουν στη μονάδα stdlib re. Τρεις λειτουργίες καλύπτουν τις περισσότερες ανάγκες:
Κανόνας: χρησιμοποιήστε «re.search» όταν έχετε αμφιβολίες. Το "re.match" ελέγχει μόνο την έναρξη. ξεχνώντας ότι οδηγεί στο "το regex μου δεν ταιριάζει!" 30 λεπτά χαμένα.
Ακατέργαστες συμβολοσειρές — να τις χρησιμοποιείτε πάντα
Το πρόθεμα r..." απενεργοποιεί την ανάστροφη κάθετο. Χωρίς αυτό, το "\d" γίνεται ""\\d" στην Python, το οποίο η μηχανή regex βλέπει ως \d — το ίδιο αποτέλεσμα, αλλά μόνο τυχαία και μόνο για το \d. Το "\n" σε ένα regex είναι μια νέα γραμμή, όχι οι δύο χαρακτήρες + n`.
Μυϊκή μνήμη: κάθε κυριολεκτική regex ξεκινά με «r». Χωρίς εξαιρέσεις.
Τα 5 μοτίβα που καλύπτουν το 90% της πραγματικής εργασίας
1. Εξαγωγή όλων των ακεραίων από το κείμενο
Σημείωση Το "199.99" χωρίζεται σε "["199", "99"]" — Το "\d+" δεν διασχίζει την τελεία. Χρησιμοποιήστε το r"\d+(?:\.\d+)?" για προαιρετικά δεκαδικά ψηφία:
2. Κανονικοποίηση κενού διαστήματος
Το \s+ αντιστοιχεί σε οποιαδήποτε σειρά διαστημάτων / καρτελών / νέων γραμμών. Αντικαταστήστε με ένα ενιαίο κενό, απογυμνώστε τις άκρες. Αυτή είναι η απάντηση της Python στο «sed -E 's/[[:space:]]+/ /g».
3. Εξαγάγετε το όνομα κεντρικού υπολογιστή από μια διεύθυνση URL
Οι παρενθέσεις δημιουργούν μια ομάδα λήψης. Το .group(1) επιστρέφει το περιεχόμενό του. [^/:]+ = "ένας ή περισσότεροι χαρακτήρες που δεν είναι / ή :" — σταματά στο διαχωριστικό θύρας Ή στη διαδρομή.
Για ανάλυση διεύθυνσης URL παραγωγής, χρησιμοποιήστε το «urllib.parse.urlparse» (χειρίζεται περιπτώσεις άκρων όπως στοιχεία χρήστη + IPv6). Το Regex είναι για γρήγορη και βρώμικη εξαγωγή.
4. Χαλαρή επικύρωση email
ΔΕΝ υπάρχει regex που να επικυρώνει πλήρως τα email ανά RFC 5322. Όποιος σας πει το αντίθετο πουλάει κάτι. Αλλά αυτό πιάνει το 99% των πραγματικών διευθύνσεων χωρίς να απορρίπτει ψευδώς καλές:
Οι άγκυρες (^ και $) επιβάλλουν ταίριασμα πλήρους χορδής. Χωρίς αυτά, το "foo@bar"" μέσα σε μια μεγαλύτερη πρόταση θα ταίριαζε.
Παραγωγή: αποστολή email επιβεβαίωσης. Αυτός είναι ο ΜΟΝΟΣ αξιόπιστος επικυρωτής email.
5. Ονομασμένες ομάδες λήψης
Οι αριθμημένες ομάδες ((...) + .group(1)) είναι καλές για 2-3 συλλήψεις. Από εκεί και πέρα, τα ονόματα κερδίζουν:
Το .groupdict() επιστρέφει μια εντολή όλων των ομάδων με όνομα. Προσθέστε / αναδιατάξτε ομάδες χωρίς να σπάσετε κάθε ιστότοπο κλήσης που αναφέρεται σε ".group(3)".
«re.compile» — όταν πραγματικά βοηθάει
Το stdlib διατηρεί μια μικρή προσωρινή μνήμη μεταγλωττισμένων μοτίβων (προεπιλεγμένο μέγεθος 512), επομένως οι εφάπαξ κλήσεις «re.search(pattern, text)» είναι ουσιαστικά δωρεάν μετά την πρώτη επίσκεψη. Το "re.compile" βοηθά ρητά όταν:
1. Το σχέδιο χρησιμοποιείται μέσα σε μια σφιχτή θηλιά (εκατομμύρια σπίρτα).
2. Θέλετε να αποθηκεύσετε το μοτίβο ως σταθερά σε επίπεδο μονάδας για grep-ability.
3. Χρειάζεστε «.finditer()», «.pattern», «.flags» στο μεταγλωττισμένο αντικείμενο.
Μην κάνετε υπερβολική μεταγλώττιση. Κάθε «re.compile» σε επίπεδο ενότητας προσθέτει ένα μικρό κόστος εισαγωγής.
Κοινές σημαίες
Συνδυασμός με |: re.IGNORECASE | re.MULTILINE.
Όταν το regex είναι το ΛΑΘΟΣ εργαλείο
1. Ανάλυση HTML / XML → χρησιμοποιήστε έναν πραγματικό αναλυτή
Η κλασική απάντηση στο Stack Overflow για αυτό είναι 20 ετών και εξακολουθεί να ισχύει.
2. Ανάλυση JSON → χρησιμοποιήστε το json
Η λειτουργική μονάδα json χειρίζεται ένθετα εισαγωγικά, χαρακτήρες διαφυγής, Unicode και κάθε θήκη RFC 8259. Το JSON με ανάλυση Regex είναι ένα σήμα κατά του μοτίβου.
3. Ανάλυση ημερομηνιών → χρησιμοποιήστε «dateutil» ή «datetime.strptime»
Το dateutil.parser.parse("2026-07-30") δέχεται κάθε μορφή που μπορεί να πληκτρολογήσει ένας άνθρωπος. Το "datetime.strptime" χειρίζεται αποτελεσματικά γνωστές μορφές. Και οι δύο χειρίζονται ζώνες ώρας. Το Regex θα έπρεπε να το εφεύρει ξανά.
4. Ένθετα / αναδρομικά μοτίβα → χρησιμοποιήστε μια γεννήτρια ανάλυσης
Οι αντιστοιχισμένες παρενέργειες, το ένθετο JSON, οι ισορροπημένες εκφράσεις είναι επίσημα πέρα από τη δύναμη του regex (περιοχή γραμματικής χωρίς πλαίσιο). Χρησιμοποιήστε «pyparsing» / «lark» / «ANTLR» — ή απλώς περπατήστε τη συμβολοσειρά με έναν μικρό αναλυτή.
Αποσφαλμάτωση regex
Χρησιμοποιήστε το regex101.com (επιλέξτε τη γεύση "Python"). Επικολλήστε το μοτίβο + δείγμα κειμένου. επισημαίνει αγώνες σε πραγματικό χρόνο, εξηγεί κάθε μεταχαρακτήρα και εμφανίζει ομάδες με όνομα. Ο ταχύτερος τρόπος για να μάθετε regex διαισθητικά.
Για τον εντοπισμό σφαλμάτων σε επίπεδο κώδικα, το "re.DEBUG" εκτυπώνει το μεταγλωττισμένο μηχάνημα κατάστασης:
Εξάσκηση
Γράψτε ένα regex για το καθένα. Λύσεις παρακάτω.
1. Εξαγάγετε τον αριθμό έκδοσης από "Python 3.13.2 (κύρια, 15 Ιανουαρίου 2026, 10:32:11)" — θα πρέπει να επιστρέψει "3.13.2"".
2. Διαχωρίστε το "μήλο, μπανάνα, πορτοκάλι κεράσι"" σε οποιοδήποτε οριοθέτη (,, ;, ή διάστημα).
3. Ξαναγράψτε το "foo.bar_baz-123" ως "FOO.BAR_BAZ-123" (μόνο κεφαλαία γράμματα, άδεια ψηφία και σημεία στίξης).
Λύσεις:
Το Regex είναι μια υπερδύναμη όταν ξεπεράσετε τα πρώτα 10 μοτίβα. Το κόλπο είναι να χτίσετε μυϊκή μνήμη στα πέντε παραπάνω — καλύπτουν το 90% της πραγματικής εργασίας. Αναζητήστε έναν πραγματικό αναλυτή τη στιγμή που θα βρείτε τον εαυτό σας να γράφει backreferences για να εξισορροπήσει τις παρενέργειες.
Επόμενο βήμα: regex + μαθήματα επεξεργασίας κειμένου στο κομμάτι Automation — εξασκηθείτε σε αρχεία καταγραφής, δεδομένα CSV και εργασίες scraping ιστού με πραγματική Python που εκτελείται στο πρόγραμμα περιήγησής σας.