Python RegEx: re.match(), re.search(), re.findall() με Παράδειγμα

Τι είναι η κανονική έκφραση σε Python?

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

Κατά τη χρήση του Python κανονική έκφραση το πρώτο πράγμα που πρέπει να αναγνωρίσουμε είναι ότι τα πάντα είναι ουσιαστικά ένας χαρακτήρας και γράφουμε μοτίβα για να ταιριάξουμε μια συγκεκριμένη ακολουθία χαρακτήρων που αναφέρεται επίσης ως συμβολοσειρά. Τα γράμματα Ascii ή τα λατινικά είναι αυτά που υπάρχουν στα πληκτρολόγιά σας και το Unicode χρησιμοποιείται για να ταιριάζει με το ξένο κείμενο. Περιλαμβάνει ψηφία και σημεία στίξης και όλους τους ειδικούς χαρακτήρες όπως $#@!%, κ.λπ.

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

  • Αντιστοίχιση κειμένου
  • Επανάληψη
  • Διακλάδωση
  • Μοτίβο-σύνθεση κ.λπ.

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

Αναγνωριστικά Τροποποιητές Λευκό διάστημα χαρακτήρες Απαιτείται διαφυγή
\d= οποιοσδήποτε αριθμός (ένα ψηφίο) Το \d αντιπροσωπεύει ένα ψηφίο.Π.χ.: \d{1,5} θα δηλώσει ψηφίο μεταξύ 1,5 όπως 424,444,545 κ.λπ. \n = νέα γραμμή . + * ? [] $ ^ () {} | \
\D= οτιδήποτε άλλο εκτός από έναν αριθμό (μη ψηφίο) + = ταιριάζει 1 ή περισσότερα \s= διάστημα
\s = χώρος
(καρτέλα, κενό, νέα γραμμή κ.λπ.)
? = ταιριάζει 0 ή 1 \t =καρτέλα
\S= οτιδήποτε άλλο εκτός από ένα κενό * = 0 ή περισσότερο \e = απόδραση
\w = γράμματα ( Αντιστοίχιση αλφαριθμητικού χαρακτήρα, συμπεριλαμβανομένου του "_") $ ταιριάζουν με το τέλος μιας συμβολοσειράς \r = επιστροφή μεταφοράς
\W =οτιδήποτε εκτός από γράμματα ( Ταιριάζει με έναν μη αλφαριθμητικό χαρακτήρα εξαιρουμένου του "_") ^ έναρξη αγώνα μιας συμβολοσειράς \f= ροή φόρμας
. = οτιδήποτε άλλο εκτός από γράμματα (περιόδους) | ταιριάζει είτε είτε με x/y ------
\b = οποιοσδήποτε χαρακτήρας εκτός από τη νέα γραμμή [] = εύρος ή "διακύμανση" ------
\. {x} = αυτή η ποσότητα του προηγούμενου κωδικού ------

Σύνταξη κανονικής έκφρασης (RE).

import re
  • Η ενότητα "re" περιλαμβάνεται με Python χρησιμοποιείται κυρίως για αναζήτηση και χειρισμό συμβολοσειρών
  • Επίσης χρησιμοποιείται συχνά για ιστοσελίδα "Ξύσιμο” (εξαγωγή μεγάλου όγκου δεδομένων από ιστότοπους)

Θα ξεκινήσουμε το σεμινάριο έκφρασης με αυτήν την απλή άσκηση χρησιμοποιώντας τις εκφράσεις (w+) και (^).

Παράδειγμα w+ και έκφρασης ^

  • "^": Αυτή η έκφραση ταιριάζει με την αρχή μιας συμβολοσειράς
  • "w+“: Αυτή η έκφραση ταιριάζει με τον αλφαριθμητικό χαρακτήρα της συμβολοσειράς

Εδώ θα δούμε α Python RegEx Παράδειγμα για το πώς μπορούμε να χρησιμοποιήσουμε την έκφραση w+ και ^ στον κώδικά μας. Καλύπτουμε τη συνάρτηση re.findall() στο Python, αργότερα σε αυτό το σεμινάριο αλλά για λίγο εστιάζουμε απλώς στην έκφραση \w+ και \^.

Για παράδειγμα, για τη συμβολοσειρά μας "guru99, η εκπαίδευση είναι διασκεδαστική" εάν εκτελέσουμε τον κώδικα με w+ και^, θα δώσει την έξοδο "guru99".

Παράδειγμα w+ και έκφρασης ^

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Θυμηθείτε, εάν αφαιρέσετε το σύμβολο + από το w+, η έξοδος θα αλλάξει και θα δώσει μόνο τον πρώτο χαρακτήρα του πρώτου γράμματος, δηλαδή, [g]

Παράδειγμα έκφρασης \s στη συνάρτηση re.split

  • “s”: Αυτή η έκφραση χρησιμοποιείται για τη δημιουργία ενός κενού στη συμβολοσειρά

Για να καταλάβετε πώς μπαίνει αυτό το RegEx Python λειτουργεί, ξεκινάμε με ένα απλό Python RegEx Παράδειγμα συνάρτησης διαχωρισμού. Στο παράδειγμα, έχουμε χωρίσει κάθε λέξη χρησιμοποιώντας τη συνάρτηση "re.split" και ταυτόχρονα χρησιμοποιήσαμε την έκφραση \s που επιτρέπει την ανάλυση κάθε λέξης στη συμβολοσειρά ξεχωριστά.

έκφραση \s στη συνάρτηση re.split

Όταν εκτελείτε αυτόν τον κώδικα, θα σας δώσει την έξοδο ['εμείς', 'είμαστε', 'διαίρεση', 'το', 'λέξεις'].

Τώρα, ας δούμε τι θα συμβεί αν αφαιρέσετε το "\" από το s. Δεν υπάρχει αλφάβητο 's' στην έξοδο, αυτό συμβαίνει επειδή έχουμε αφαιρέσει το '\' από τη συμβολοσειρά, και αξιολογεί το "s" ως κανονικό χαρακτήρα και έτσι χωρίζει τις λέξεις όπου βρει το "s" στη συμβολοσειρά.

έκφραση \s στη συνάρτηση re.split

Ομοίως, υπάρχουν σειρές άλλων Python κανονική έκφραση που μπορείτε να χρησιμοποιήσετε με διάφορους τρόπους Python όπως \d,\D,$,\.,\b, κ.λπ.

Εδώ είναι ο πλήρης κώδικας

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

Στη συνέχεια, θα δούμε τους τύπους μεθόδων που χρησιμοποιούνται με κανονική έκφραση Python.

Χρησιμοποιώντας μεθόδους κανονικής έκφρασης

Το πακέτο "re" παρέχει πολλές μεθόδους για την πραγματοποίηση ερωτημάτων σε μια συμβολοσειρά εισόδου. Θα δούμε τις μεθόδους του re in Python:

  • re.match()
  • έρευνα()
  • re.findall()

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

re.match()

re.match() λειτουργία του re in Python θα αναζητήσει το πρότυπο κανονικής έκφρασης και θα επιστρέψει την πρώτη εμφάνιση. Ο Python Η μέθοδος RegEx Match ελέγχει για μια αντιστοίχιση μόνο στην αρχή της συμβολοσειράς. Έτσι, εάν βρεθεί ένα ταίριασμα στην πρώτη γραμμή, επιστρέφει το αντικείμενο αντιστοίχισης. Αλλά αν βρεθεί ένα ταίρι σε κάποια άλλη γραμμή, το Python Η συνάρτηση RegEx Match επιστρέφει null.

Για παράδειγμα, λάβετε υπόψη τον ακόλουθο κώδικα του Python συνάρτηση re.match(). Η έκφραση "w+" και "\W" θα ταιριάζει με τις λέξεις που ξεκινούν με το γράμμα "g" και στη συνέχεια, οτιδήποτε δεν ξεκινά με "g" δεν προσδιορίζεται. Για να ελέγξουμε την αντιστοίχιση για κάθε στοιχείο στη λίστα ή τη συμβολοσειρά, εκτελούμε το forloop σε αυτό Python re.match() Παράδειγμα.

re.match()

re.search(): Εύρεση μοτίβου σε κείμενο

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

Πώς να χρησιμοποιήσετε την αναζήτηση();

Για να χρησιμοποιήσετε τη συνάρτηση search(), πρέπει να κάνετε εισαγωγή Python re module πρώτα και μετά εκτελέστε τον κώδικα. Ο Python Η συνάρτηση re.search() παίρνει το "μοτίβο" και το "κείμενο" για σάρωση από την κύρια συμβολοσειρά μας

χρήση αναζήτησης()

Για παράδειγμα, εδώ αναζητούμε δύο κυριολεκτικές συμβολοσειρές "Δοκιμή λογισμικού" "guru99", σε μια συμβολοσειρά κειμένου "Λογισμικό Δοκιμές είναι διασκεδαστικό». Για "δοκιμή λογισμικού" βρήκαμε την αντιστοίχιση, επομένως επιστρέφει την έξοδο του Python re.search() Παράδειγμα ως "found a match", ενώ για τη λέξη "guru99" δεν μπορούσαμε να βρούμε σε συμβολοσειρά, επομένως επιστρέφει την έξοδο ως "No match".

re.findall()

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

Πώς να χρησιμοποιήσετε το re.findall() στο Python?

Εδώ έχουμε μια λίστα με διευθύνσεις ηλεκτρονικού ταχυδρομείου και θέλουμε όλες οι διευθύνσεις e-mail να ανακτηθούν από τη λίστα, χρησιμοποιούμε τη μέθοδο re.findall() στο Python. Θα βρει όλες τις διευθύνσεις e-mail από τη λίστα.

Χρησιμοποιήστε το re.findall() στο Python

Εδώ είναι ο πλήρης κώδικας για το Παράδειγμα της re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Σημαίες

Πολλές Python Οι μέθοδοι Regex και οι συναρτήσεις Regex λαμβάνουν ένα προαιρετικό όρισμα που ονομάζεται Flags. Αυτές οι σημαίες μπορούν να τροποποιήσουν την έννοια του δεδομένου Python Regex μοτίβο. Για να τα κατανοήσουμε αυτά θα δούμε ένα ή δύο παραδείγματα αυτών των Σημαιών.

Διάφορες σημαίες που χρησιμοποιούνται σε Python περιλαμβάνει

Σύνταξη για Regex Flags Τι κάνει αυτή η σημαία
[re.M] Κάντε την αρχή/τέλος να εξετάσει κάθε γραμμή
[re.I] Αγνοεί περίπτωση
[re.S] Φτιαχνω, κανω [ . ]
[re.U] Κάντε το { \w,\W,\b,\B} να ακολουθεί τους κανόνες Unicode
[re.L] Κάντε το {\w,\W,\b,\B} να ακολουθεί τις τοπικές ρυθμίσεις
[βασιλιάς] Να επιτρέπεται το σχόλιο στο Regex

Παράδειγμα σημαιών re.M ή Multiline

Σε πολλές γραμμές, ο χαρακτήρας του μοτίβου [^] ταιριάζει με τον πρώτο χαρακτήρα της συμβολοσειράς και την αρχή κάθε γραμμής (ακολουθεί αμέσως μετά από κάθε νέα γραμμή). Ενώ η έκφραση small "w" χρησιμοποιείται για να επισημάνετε το χώρο με χαρακτήρες. Όταν εκτελείτε τον κώδικα, η πρώτη μεταβλητή "k1" εκτυπώνει μόνο τον χαρακτήρα 'g' για τη λέξη guru99, ενώ όταν προσθέτετε σημαία πολλαπλών γραμμών, ανασύρει τους πρώτους χαρακτήρες όλων των στοιχείων της συμβολοσειράς.

Παράδειγμα σημαιών re.M ή Multiline

Εδώ είναι ο κωδικός

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Δηλώσαμε τη μεταβλητή xx για συμβολοσειρά ” guru99…. careerguru99….σελήνιο»
  • Εκτελέστε τον κώδικα χωρίς να χρησιμοποιήσετε σημαίες πολλαπλών γραμμών, δίνει την έξοδο μόνο "g" από τις γραμμές
  • Εκτελέστε τον κωδικό με τη σημαία "πολλαπλή γραμμή", όταν εκτυπώνετε 'k2' δίνει την έξοδο ως 'g', 'c' και 's'
  • Έτσι, η διαφορά που μπορούμε να δούμε μετά και πριν από την προσθήκη πολλών γραμμών στο παραπάνω παράδειγμα.

Ομοίως, μπορείτε επίσης να χρησιμοποιήσετε άλλα Python σημαίες όπως re.U (Unicode), re.L (Ακολουθήστε τις τοπικές ρυθμίσεις), re.X (Να επιτρέπεται το σχόλιο) κ.λπ.

Python 2 Παράδειγμα

Οι παραπάνω κωδικοί είναι Python 3 παραδείγματα, Αν θέλετε να τρέξετε μέσα Python 2, λάβετε υπόψη τον ακόλουθο κώδικα.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Δοκιμάστε το Python Γνώση

1. Ποια μέθοδος χρησιμοποιείται για την εύρεση όλων των εμφανίσεων ενός μοτίβου σε μια συμβολοσειρά;

  • έρευνα()
  • re.match()
  • re.findall()
  • re.split()
Η re.findall() χρησιμοποιείται για να βρει όλες τις εμφανίσεις ενός μοτίβου σε μια συμβολοσειρά.

2. Τι αντιπροσωπεύει η κλάση χαρακτήρων \d σε κανονικές εκφράσεις;

  • Οποιοδήποτε ψηφίο (0-9)
  • Οποιοσδήποτε μη ψηφίος χαρακτήρας
  • Οποιοσδήποτε χαρακτήρας κενού διαστήματος
  • Οποιοδήποτε γράμμα ή αριθμός
Το \d αντιπροσωπεύει οποιοδήποτε ψηφίο (0-9).

3. Ποια συνάρτηση θα χρησιμοποιούσατε για να χωρίσετε μια συμβολοσειρά με βάση κενά;

  • re.split(r'\s', συμβολοσειρά)
  • re.findall(r'\w+', συμβολοσειρά)
  • re.match(r'\s+', string)
  • re.split(r'\w+', συμβολοσειρά)
Το re.split(r'\s', string) διαχωρίζει μια συμβολοσειρά με βάση κενά χρησιμοποιώντας την έκφραση \s.

4. Ποια είναι η κύρια διαφορά μεταξύ του re.match() και του re.search();

  • Το re.match() αναζητά ένα μοτίβο στην αρχή μιας συμβολοσειράς, ενώ το re.search() αναζητά ένα μοτίβο οπουδήποτε στη συμβολοσειρά.
  • Το re.match() επιστρέφει όλους τους αγώνες, ενώ το re.search() επιστρέφει το πρώτο ταίριασμα.
  • Το re.search() είναι ταχύτερο από το re.match().
  • Και οι δύο λειτουργίες συμπεριφέρονται με τον ίδιο τρόπο.
Το re.match() αναζητά ένα μοτίβο στην αρχή μιας συμβολοσειράς, ενώ το re.search() αναζητά ένα μοτίβο οπουδήποτε στη συμβολοσειρά.

Σύνοψη

Μια κανονική έκφραση σε α γλώσσα προγραμματισμού είναι μια ειδική συμβολοσειρά κειμένου που χρησιμοποιείται για την περιγραφή ενός μοτίβου αναζήτησης. Περιλαμβάνει ψηφία και σημεία στίξης και όλους τους ειδικούς χαρακτήρες όπως $#@!%, κ.λπ. Η έκφραση μπορεί να περιλαμβάνει κυριολεκτικά

  • Αντιστοίχιση κειμένου
  • Επανάληψη
  • Διακλάδωση
  • Μοτίβο-σύνθεση κ.λπ.

In Python, μια κανονική έκφραση συμβολίζεται ως RE (REs, regex ή regex μοτίβο) ενσωματώνονται μέσω Python εκ νέου ενότητα.

  • Η ενότητα "re" περιλαμβάνεται με Python χρησιμοποιείται κυρίως για αναζήτηση και χειρισμό συμβολοσειρών
  • Χρησιμοποιείται επίσης συχνά για "Scraping" ιστοσελίδας (εξαγωγή μεγάλου όγκου δεδομένων από ιστότοπους)
  • Οι μέθοδοι κανονικής έκφρασης περιλαμβάνουν re.match(),re.search()& re.findall()
  • ΑΛΛΑ Python Οι μέθοδοι αντικατάστασης RegEx είναι οι sub() και subn() που χρησιμοποιούνται για την αντικατάσταση των αντιστοιχιζόμενων συμβολοσειρών στο re
  • Python Σημαίες Πολλές Python Οι μέθοδοι Regex και οι συναρτήσεις Regex λαμβάνουν ένα προαιρετικό όρισμα που ονομάζεται Flags
  • Αυτές οι σημαίες μπορούν να τροποποιήσουν το νόημα του δεδομένου μοτίβου Regex
  • Διάφορος Python Οι σημαίες που χρησιμοποιούνται στις μεθόδους Regex είναι οι re.M, re.I, re.S κ.λπ.

Περισσότερα readmore