1.4 Ο όρος RegEx ή Κανονική Έκφραση στην Python

Ο όρος “RegEx” αναφέρεται στην Κανονική Έκφραση (Regular Expression) στη γλώσσα προγραμματισμού Python. Η Κανονική Έκφραση, γνωστή και ως RegEx, είναι μια ακολουθία χαρακτήρων που ορίζει ένα πρότυπο αναζήτησης.

Το RegEx επιτρέπει τον έλεγχο εάν μια συμβολοσειρά πληροί ένα συγκεκριμένο πρότυπο αναζήτησης. Στη γλώσσα προγραμματισμού Python, υπάρχει ένα ενσωματωμένο πακέτο με την ονομασία “re” που παρέχει λειτουργίες για την εργασία με Κανονικές Εκφράσεις.

Εισαγωγή και χρήση του module re:

import re

# Ορισμός του κειμένου που θα αναζητήσουμε
text = "The string is an example"

# Ορισμός του μοτίβου που θέλουμε να βρούμε
pattern = "The string"

# Αναζήτηση του μοτίβου στο κείμενο
match = re.search(pattern, text)

# Έλεγχος εάν βρέθηκε το μοτίβο
if match:
    print("Pattern found in the text!")
else:
    print("Pattern NOT found in the text!")

Ο παραπάνω κώδικας πραγματοποιεί αναζήτηση ενός μοτίβου σε ένα κείμενο χρησιμοποιώντας τη βιβλιοθήκη re (regular expressions) της Python.

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

Στη συνέχεια, ελέγχεται εάν βρέθηκε το μοτίβο στο κείμενο. Αν η αναζήτηση επιστρέψει αποτέλεσμα (δηλαδή έχει βρεθεί το μοτίβο), τότε εκτυπώνεται το μήνυμα “Pattern found in the text!”. Αντίθετα, αν δεν βρεθεί το μοτίβο, εκτυπώνεται το μήνυμα “Pattern NOT found in the text!”.

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

Οι συναρτήσεις του module re προσφέρουν διάφορες λειτουργίες για την αναζήτηση και επεξεργασία συμβολοσειρών χρησιμοποιώντας τα regular expressions (RegEx):

  1. Η συνάρτηση findall() επιστρέφει μια λίστα που περιέχει όλα τα ταιριάσματα ενός προτύπου στη συμβολοσειρά.
  2. Η συνάρτηση search() επιστρέφει ένα αντικείμενο Match αν βρεθεί ένα ταίριασμα του προτύπου κάπου στη συμβολοσειρά.
  3. Η συνάρτηση split() επιστρέφει μια λίστα όπου η συμβολοσειρά έχει χωριστεί σε κάθε σημείο όπου βρίσκεται το πρότυπο.
  4. Η συνάρτηση sub() αντικαθιστά ένα ή περισσότερα ταιριάσματα ενός προτύπου με μια συμβολοσειρά.

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

[adinserter block=”2″]

Παράδειγμα findall():

import re

text = "The weather today is sunny, and tomorrow will be rainy."
pattern = "\\b[a-zA-Z]*day\\b"

# Αναζήτηση για αντιστοιχίες με το μοτίβο
matches = re.findall(pattern, text)

# Εκτύπωση των αντιστοιχιών
print("Matches:", matches)

Ο παραπάνω κώδικας πραγματοποιεί την αναζήτηση για αντιστοιχίες ενός συγκεκριμένου μοτίβου σε ένα κείμενο. Ας εξηγήσουμε τα βήματα:

  1. Εισάγετε τη βιβλιοθήκη re, η οποία παρέχει λειτουργίες για τις κανονικές εκφράσεις (regular expressions).
  2. Ορίζετε μια μεταβλητή text που περιέχει το κείμενο στο οποίο θα γίνει η αναζήτηση.
  3. Ορίζετε μια μεταβλητή pattern που περιέχει το μοτίβο που θέλετε να αναζητήσετε. Σε αυτήν την περίπτωση, το μοτίβο είναι \\b[a-zA-Z]*day\\b, το οποίο αντιστοιχεί σε λέξεις που τελειώνουν σε “day”.
  4. Χρησιμοποιώντας τη μέθοδο findall() της βιβλιοθήκης re, εκτελείται η αναζήτηση αντιστοιχίας με το μοτίβο στο κείμενο. Οι αντιστοιχίες επιστρέφονται σε μορφή λίστας και αποθηκεύονται στη μεταβλητή matches.
  5. Τέλος, εκτυπώνονται οι αντιστοιχίες που βρέθηκαν με τη χρήση της εντολής print("Matches:", matches).

Συνολικά, ο κώδικας εκτελεί μια αναζήτηση για λέξεις που τελειώνουν σε “day” στο κείμενο και εκτυπώνει τις αντιστοιχίες που βρέθηκαν.

Το αποτέλεσμα της εκτέλεσης του κώδικα θα είναι:

Matches: ['today']

Αυτό σημαίνει ότι βρέθηκαν δύο αντιστοιχίες στο κείμενο που ταιριάζουν με το μοτίβο που καθορίσαμε. Οι λέξεις που βρέθηκαν και εμφανίζονται στη λίστα είναι “today”.

Παράδειγμα search():

import re

text = "The weather today is sunny, and tomorrow will be rainy."
pattern = "\\b[a-zA-Z]*day\\b"

# Αναζήτηση αντιστοιχίας στο κείμενο
match = re.search(pattern, text)

if match:
    # Αν βρεθεί αντιστοιχία, εκτύπωση της αντιστοιχίας που βρέθηκε
    print("Match found:", match.group())
else:
    # Αν δεν βρεθεί αντιστοιχία, εκτύπωση αντίστοιχου μηνύματος
    print("No match found")

Ο παραπάνω κώδικας εκτελεί την ακόλουθη λειτουργία:

  1. Εισάγει τη βιβλιοθήκη re, η οποία χρησιμοποιείται για την επεξεργασία κειμένου με βάση πρότυπα (patterns).
  2. Ορίζει μια μεταβλητή text που περιέχει το κείμενο που θα επεξεργαστούμε.
  3. Ορίζει μια μεταβλητή pattern που περιέχει ένα πρότυπο αναζήτησης. Συγκεκριμένα, το πρότυπο αναζητά λέξεις που ξεκινούν με οποιοδήποτε γράμμα, ακολουθούμενες από τη λέξη “day” και έχουν το τέλος τους μετά από ένα διάστημα ή σημείο στίξης.
  4. Χρησιμοποιεί τη συνάρτηση re.search() για να αναζητήσει την πρώτη αντιστοιχία του προτύπου στο κείμενο.
  5. Αν βρεθεί αντιστοιχία, τότε εκτυπώνει το μήνυμα “Match found:” ακολουθούμενο από την αντιστοιχία που βρέθηκε με τη βοήθεια της μεθόδου .group().
  6. Αν δεν βρεθεί αντιστοιχία, τότε εκτυπώνει το μήνυμα “No match found”.

Ο κώδικας αυτός χρησιμοποιεί τη βιβλιοθήκη re για να εκτελέσει μια απλή αναζήτηση αντιστοιχίας σε ένα κείμενο, βάσει ενός προκαθορισμένου προτύπου. Συγκεκριμένα, αναζητά λέξεις που περιέχουν τη λέξη “day” και εκτυπώνει την πρώτη αντιστοιχία που βρίσκει.

Το αποτέλεσμα της εκτέλεσης του παραπάνω κώδικα θα είναι:

Match found: today

Αυτό συμβαίνει επειδή το πρότυπο αναζήτησης αντιστοιχεί στη λέξη “today” στο κείμενο.

Παράδειγμα split():

import re

text = "The weather today is sunny, and tomorrow will be rainy."
pattern = "\\b,\\b"

# Χρήση της συνάρτησης re.split() για να χωρίσουμε το κείμενο με βάση το πρότυπο
split_text = re.split(pattern, text)

# Εκτύπωση του χωρισμένου κειμένου
print("Split text:", split_text)

Ο κώδικας αυτός χρησιμοποιεί τη βιβλιοθήκη re (regular expressions) της Python για να διαχωρίσει ένα κείμενο σε τμήματα βάσει ενός προτύπου. Ακολουθούν οι βασικές λειτουργίες του κώδικα:

  1. Εισαγωγή της βιβλιοθήκης re.
  2. Ορισμός του κειμένου που θα διαχωριστεί στη μεταβλητή text.
  3. Ορισμός ενός προτύπου χρησιμοποιώντας την ακολουθία "\\b,\\b". Το πρότυπο αυτό αντιστοιχεί σε μία κόμμα που βρίσκεται ανάμεσα σε δύο λέξεις.
  4. Χρήση της συνάρτησης re.split() για να διαχωρίσει το κείμενο σε τμήματα βάσει του προτύπου. Τα τμήματα αποθηκεύονται στη μεταβλητή split_text.
  5. Εκτύπωση του χωρισμένου κειμένου με τη χρήση της εντολής print(), που εμφανίζει την ακολουθία “Split text:” ακολουθούμενη από τα τμήματα του κειμένου που έχουν διαχωριστεί.

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

Το αποτέλεσμα εκτέλεσης του κώδικα θα είναι:

Split text: ['The weather today is sunny', 'and tomorrow will be rainy.']

Το αρχικό κείμενο διαχωρίζεται στην πρώτη συμπίεση (,) που ακολουθείται από κενά. Στην παραπάνω περίπτωση, το κείμενο διαχωρίζεται σε δύο τμήματα:

  1. 'The weather today is sunny'
  2. 'and tomorrow will be rainy.'

Αυτά τα δύο τμήματα εμφανίζονται ως αποτέλεσμα της εντολής print().

Παράδειγμα sub():

import re

text = "The weather today is sunny, and tomorrow will be rainy."
pattern = "\\b[a-zA-Z]*day\\b"  # Ορίζεται ένα πρότυπο για αναζήτηση λέξεων που τελειώνουν σε "day"
replacement = "XXX"  # Ορίζεται η αντικατάσταση που θα γίνει για τις αντιστοίχισες

substituted_text = re.sub(pattern, replacement, text)  # Εκτελείται η αντικατάσταση των αντιστοιχιών με την αντικατάσταση
print("Substituted text:", substituted_text)  # Εκτύπωση του κειμένου μετά την αντικατάσταση

[adinserter block=”3″]

Ο παραπάνω κώδικας πραγματοποιεί την αντικατάσταση συμβολοσειρών σε ένα κείμενο χρησιμοποιώντας τη βιβλιοθήκη re (regular expressions) της Python.

Αρχικά, δημιουργείται μια μεταβλητή text που περιέχει το αρχικό κείμενο που θέλουμε να τροποποιήσουμε.

Στη συνέχεια, ορίζεται ένα πρότυπο αναζήτησης (pattern) που αντιπροσωπεύει μια λέξη που τελειώνει σε “day” και θέλουμε να αντικατασταθεί.

Η μεταβλητή replacement καθορίζει τη συμβολοσειρά που θα χρησιμοποιηθεί για την αντικατάσταση των αντιστοιχιών.

Στη συνέχεια, η συνάρτηση re.sub() καλείται για να εκτελέσει την αντικατάσταση. Παίρνει ως ορίσματα το πρότυπο αναζήτησης, τη συμβολοσειρά αντικατάστασης και το κείμενο που θέλουμε να τροποποιήσουμε. Το αποτέλεσμα της αντικατάστασης αποθηκεύεται στη μεταβλητή substituted_text.

Τέλος, το τροποποιημένο κείμενο εκτυπώνεται στην οθόνη.

Το αποτέλεσμα εκτέλεσης του παραπάνω κώδικα θα είναι:

Substituted text: The weather XXX is sunny, and tomorrow will be rainy.

Η λέξη “today” στο αρχικό κείμενο αντικαθίσταται από τη συμβολοσειρά “XXX”, σύμφωνα με το πρότυπο αναζήτησης που καθορίσαμε. Έτσι, η τροποποιημένη συμβολοσειρά εκτυπώνεται στην οθόνη.

Ακολουθεί ένας πίνακας με μεταχαρακτήρες και παραδείγματα:

ΜεταχαρακτήραςΠεριγραφήΠαράδειγμα ΠροτύπουΤαιριάζει με
.Οποιοσδήποτε χαρακτήρας.a“ba”, “ca”, “da”, …
^Έναρξη της συμβολοσειράς^Ηello“Hello world”, “Hello Python”
$Τέλος της συμβολοσειράςworld$“Hello world”, “Beautiful world”
*Μηδέν ή περισσότερα επαναλήψεις του προηγούμενου χαρακτήραa*“”, “a”, “aa”, “aaa”, …
+Μία ή περισσότερες επαναλήψεις του προηγούμενου χαρακτήραa+“a”, “aa”, “aaa”, …
?Μηδέν ή μία επανάληψη του προηγούμενου χαρακτήραa?“”, “a”
{n}n επαναλήψεις του προηγούμενου χαρακτήραa{2}“aa”
{n,m}Από n έως m επαναλήψεις του προηγούμενου χαρακτήραa{2,4}“aa”, “aaa”, “aaaa”
|Λειτουργεί ως “ή” για να ταιριάξει με έναν από τους δύο χαρακτήρεςa|b“a”, “b”
()Δημιουργεί μια ομάδα χαρακτήρων(abc)+“abc”, “abcabc”, “abcabcabc”
\Χρησιμοποιείται για να γ

Συνεχίζοντας με τους μεταχαρακτήρες:

ΜεταχαρακτήραςΠεριγραφήΠαράδειγμα ΠροτύπουΤαιριάζει με
\AΈναρξη του κειμένου\AHello“Hello world”, “Hello Python”
\ZΤέλος του κειμένουworld\Z“Hello world”, “Beautiful world”
\bΌριο λέξης (κενό, τελεία, κόμμα κλπ.)\bword\b“word”, “The word is”, “a word.”
\BΜη όριο λέξης\Bword\B“words”, “wordplay”, “password”
\dΟποιοσδήποτε ψηφίο (0-9)\d“0”, “1”, “2”, …
\DΟποιοσδήποτε μη ψηφίο\D“a”, “b”, “c”, …
\sΟποιοσδήποτε κενό χαρακτήρα (space, tab, newline)\s” “, “\t”, “\n”
\SΟποιοσδήποτε μη κενό χαρακτήρα\S“a”, “b”, “c”, …
\wΟποιοσδήποτε λεκτικό χαρακτήρα (a-z, A-Z, 0-9, _)\w“a”, “A”, “1”, “_”
\WΟποιοσδήποτε μη λεκτικό χαρακτήρα\W“!”, “@”, “#”, …

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

Εύρεση όλων των ταιριαστών συμβολοσειρών:

import re

text = "Το email του Γιάννη είναι giannis@example.com και του Νίκου nikos@example.org"
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'

# Αναζήτηση αντιστοιχιών στο κείμενο με βάση το πρότυπο
matches = re.findall(pattern, text)

# Εκτύπωση των βρεθέντων emails
print("Βρέθηκαν τα εξής emails:", matches)

Ο παραπάνω κώδικας χρησιμοποιεί τη βιβλιοθήκη re της Python για να αναζητήσει emails σε ένα κείμενο.

Αρχικά, ορίζεται η μεταβλητή text που περιέχει ένα κείμενο με πιθανά emails. Στη συνέχεια, ορίζεται το πρότυπο αναζήτησης για τα emails στη μεταβλητή pattern. Το πρότυπο αναζήτησης ακολουθεί ένα συγκεκριμένο μοτίβο που περιγράφει τη μορφή που πρέπει να έχουν τα emails.

Στη συνέχεια, η μέθοδος findall() της βιβλιοθήκης re καλείται με το πρότυπο pattern και το κείμενο text ως παραμέτρους. Αυτή η μέθοδος επιστρέφει μια λίστα με όλα τα emails που βρέθηκαν στο κείμενο.

Τέλος, εκτυπώνεται το μήνυμα “Βρέθηκαν τα εξής emails:” ακολουθούμενο από τη λίστα matches που περιέχει τα βρεθέντα emails.

Έτσι, ο κώδικας εκτελεί αναζήτηση για emails στο κείμενο και εκτυπώνει τα βρεθέντα emails.

Το αποτέλεσμα εκτέλεσης του κώδικα θα είναι:

Βρέθηκαν τα εξής emails: ['giannis@example.com', 'nikos@example.org']

Αυτό σημαίνει ότι ο κώδικας βρήκε δύο emails στο κείμενο που πληρούν το προκαθορισμένο μοτίβο του πρότυπου αναζήτησης. Τα βρεθέντα emails εμφανίζονται ως στοιχεία μιας λίστας, που εκτυπώνεται με το μήνυμα “Βρέθηκαν τα εξής emails:”.

Αντικατάσταση κειμένου με βάση ένα πρότυπο:

import re

text = "Το κόστος είναι 35€ και τα έξοδα αποστολής 5€."
pattern = r'(\d+)€'
replacement = r'$1 USD'

# Αντικατάσταση χρήσης της συνάρτησης re.sub()
result = re.sub(pattern, replacement, text)

print("Το αποτέλεσμα μετά την αντικατάσταση είναι:", result)

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

Συγκεκριμένα, ο κώδικας δημιουργεί μια μεταβλητή text που περιέχει μια συμβολοσειρά. Στη συνέχεια, ορίζεται το πρότυπο pattern ως r'(\d+)€', το οποίο αντιστοιχεί σε οποιονδήποτε αριθμητικό χαρακτήρα που προηγείται από το σύμβολο “€”.

Στη συνέχεια, ορίζεται η μεταβλητή replacement ως r'$1 USD', που αντιπροσωπεύει την αντικατάσταση που θα γίνει για κάθε αντιστοίχιση. Στην περίπτωση αυτή, το αντίστοιχο υποσυνήθιστο \d αποτελεί τον αριθμητικό χαρακτήρα που βρίσκεται στο πρότυπο, και το $1 αντιπροσωπεύει την τιμή του πρώτου αντιστοίχισης. Η λέξη “USD” προστίθεται μετά τον αριθμό για την αντικατάσταση.

Τέλος, χρησιμοποιείται η συνάρτηση re.sub() για να πραγματοποιηθεί η αντικατάσταση στην αρχική συμβολοσειρά text. Το αποτέλεσμα αποθηκεύεται στη μεταβλητή result. Τέλος, εκτυπώνεται το αποτέλεσμα.

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

Το αποτέλεσμα μετά την αντικατάσταση είναι: Το κόστος είναι $1 USD και τα έξοδα αποστολής $1 USD.

[adinserter block=”4″]

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

import re

text = "Ο κωδικός πρόσβασης πρέπει να περιέχει: κεφαλαία γράμματα, πεζά γράμματα, αριθμούς και σύμβολα."
pattern = r'\W+'
words = re.split(pattern, text)

# Εκτύπωση των στοιχείων που διαχωρίστηκαν από το κείμενο
print("Η συμβολοσειρά διαχωρίστηκε στα εξής στοιχεία:", words)

Ο παραπάνω κώδικας πραγματοποιεί τις εξής ενέργειες:

  1. Εισάγει τη βιβλιοθήκη re για την εκτέλεση πράξεων σχετικών με τις regular expressions (κανονικές εκφράσεις).
  2. Ορίζει μια συμβολοσειρά text που περιέχει ένα κείμενο που περιγράφει τις απαιτήσεις ενός κωδικού πρόσβασης.
  3. Ορίζει ένα πρότυπο pattern που αναπαριστά μια κανονική έκφραση για αντιστοίχιση μη αλφαριθμητικών χαρακτήρων.
  4. Χρησιμοποιεί την re.split() για να διαχωρίσει τη συμβολοσειρά text σε μια λίστα με τις λέξεις που περιέχει, ακολουθώντας το πρότυπο pattern.
  5. Εκτυπώνει τη λίστα των λέξεων που προέκυψαν από τη διαχωριστική διεργασία.

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

Η έξοδος του παραπάνω κώδικα θα είναι:

Η συμβολοσειρά διαχωρίστηκε στα εξής στοιχεία: ['Ο', 'κωδικός', 'πρόσβασης', 'πρέπει', 'να', 'περιέχει', 'κεφαλαία', 'γράμματα', 'πεζά', 'γράμματα', 'αριθμούς', 'και', 'σύμβολα', '']

Η συμβολοσειρά text διαχωρίζεται σε λέξεις με βάση τα μη αλφαριθμητικά χαρακτήρα που ορίζεται από το πρότυπο pattern. Η λίστα words περιέχει τις λέξεις που προέκυψαν από την διαχωριστική διεργασία.

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

Οι ειδικές ακολουθίες είναι χαρακτήρες που ακολουθούνται από ένα backslash (/) και έχουν ειδική σημασία. Ακολουθεί ένας πίνακας με τους χαρακτήρες, την περιγραφή τους και παραδείγματα:

ΧαρακτήραςΠεριγραφήΠαράδειγμα
\AΈναρξη του κειμένου\AThe
\bΌριο λέξης\bThe\b
\BΜη όριο λέξης\BThe\B
\dΟποιοσδήποτε ψηφίο (0-9)\d
\DΟποιοσδήποτε μη ψηφίο\D
\sΟποιοσδήποτε κενό χαρακτήρας (space, tab, newline)\s
\SΟποιοσδήποτε μη κενό χαρακτήρας\S
\wΟποιοσδήποτε λεκτικό χαρακτήρα (a-z, A-Z, 0-9, _)\w
\WΟποιοσδήποτε μη λεκτικό χαρακτήρα\W
\ZΤέλος του κειμένουend\Z
\Ένα λεκτικό backslash\
\nΝέα γραμμή\n
\rΕπιστροφή καρέκλας\r
\tΣτοίχιση (tab)\t

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

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

Εύρεση όλων των λέξεων που ξεκινούν με ένα κεφαλαίο γράμμα:

import re

text = "Python is a popular programming language. It is flexible and strong."
pattern = r'\b[A-Z][a-z]*\b'

# Χρήση της συνάρτησης re.findall() για να βρεθούν οι αντιστοιχίες στο κείμενο
matches = re.findall(pattern, text)

# Εκτύπωση των λέξεων που ξεκινούν με κεφαλαίο γράμμα
print("Λέξεις που ξεκινούν με κεφαλαίο γράμμα:", matches)

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

Το αποτέλεσμα του κώδικα θα είναι:

Λέξεις που ξεκινούν με κεφαλαίο γράμμα: ['Python', 'It']

Οι λέξεις που ξεκινούν με κεφαλαίο γράμμα στο κείμενο είναι η “Python” και η “Είναι”, και εκτυπώνονται μεταξύ αγκυλών ([]).

[adinserter block=”5″]

Εύρεση όλων των τηλεφωνικών αριθμών που ακολουθούν το πρότυπο (xxx) xxx-xxxx:

import re

text = "Οι αριθμοί τηλεφώνου είναι (123) 456-7890 και (987) 654-3210."
pattern = r'\(\d{3}\) \d{3}-\d{4}'  # Ορίζουμε το πρότυπο για την αναζήτηση της μορφής του τηλεφωνικού αριθμού
matches = re.findall(pattern, text)  # Χρησιμοποιούμε την findall() για να βρούμε όλες τις αντιστοιχίες

print("Τηλεφωνικοί αριθμοί:", matches)  # Εκτύπωση των αντιστοιχιών που βρέθηκαν

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

  1. Ορίζουμε το κείμενο που θέλουμε να εξετάσουμε στη μεταβλητή text.
  2. Ορίζουμε το πρότυπο pattern που χρησιμοποιούμε για να εντοπίσουμε τους τηλεφωνικούς αριθμούς. Το πρότυπο r'\(\d{3}\) \d{3}-\d{4}' αντιπροσωπεύει τη μορφή (123) 456-7890, όπου \d αντιπροσωπεύει έναν αριθμό.
  3. Χρησιμοποιούμε τη μέθοδο findall() της βιβλιοθήκης re για να βρούμε όλες τις αντιστοιχίες του προτύπου στο κείμενο. Οι αντιστοιχίες επιστρέφονται ως μια λίστα.
  4. Εκτυπώνουμε τη φράση “Τηλεφωνικοί αριθμοί:” ακολουθούμενη από τα αποτελέσματα των αντιστοιχιών που βρέθηκαν.

Στο παράδειγμα αυτό, η έξοδος θα είναι:

Τηλεφωνικοί αριθμοί: ['(123) 456-7890', '(987) 654-3210']

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

Εύρεση των λέξεων που περιέχουν αριθμούς:

import re

text = "Οι κωδικοί πρόσβασης είναι pass1234, secret5678 και admin9012."
pattern = r'\b\w*\d\w*\b'  # Ορίζουμε το πρότυπο για την αναζήτηση λέξεων με αριθμούς
matches = re.findall(pattern, text)  # Εκτελούμε την αναζήτηση στο κείμενο και αποθηκεύουμε τις αντιστοιχίες στη λίστα 'matches'

print("Λέξεις που περιέχουν αριθμούς:", matches)  # Εκτυπώνουμε τις λέξεις που περιέχουν αριθμούς

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

  1. Ορίζουμε το κείμενο που θέλουμε να εξετάσουμε στη μεταβλητή text.
  2. Ορίζουμε το πρότυπο pattern που χρησιμοποιούμε για να εντοπίσουμε τις λέξεις με αριθμούς. Το πρότυπο r'\b\w*\d\w*\b' αντιπροσωπεύει μια λέξη που περιέχει τουλάχιστον έναν αριθμό, ενώ μπορεί να περιέχει και γράμματα και αριθμούς.
    • \b αντιστοιχεί σε μια λέξη που ξεκινά και τελειώνει σε όριο λέξης (word boundary).
    • \w* αντιπροσωπεύει μηδέν ή περισσότερα γράμματα και αριθμούς.
    • \d αντιπροσωπεύει έναν αριθμό.
  3. Χρησιμοποιούμε τη μέθοδο findall() της βιβλιοθήκης re για να βρούμε όλες τις αντιστοιχίες του προτύπου στο κείμενο. Οι αντιστοιχίες επιστρέφονται ως μια λίστα.
  4. Εκτυπώνουμε τις λέξεις που περιέχουν αριθμούς με τη χρήση της εντολής print().

Όταν εκτελέσετε τον παραπάνω κώδικα, το αποτέλεσμα που θα εκτυπωθεί στην οθόνη θα είναι η λέξεις που περιέχουν αριθμούς από το κείμενο. Για παράδειγμα, αν το κείμενο είναι “Οι κωδικοί πρόσβασης είναι pass1234, secret5678 και admin9012.”, το αποτέλεσμα θα είναι:

Λέξεις που περιέχουν αριθμούς: ['pass1234', 'secret5678', 'admin9012']

Οι λέξεις που περιέχουν αριθμούς εντοπίζονται με βάση το πρότυπο που ορίστηκε και αποθηκεύονται στη λίστα matches. Στη συνέχεια, εκτυπώνεται η λίστα matches με την προτροπή “Λέξεις που περιέχουν αριθμούς:”.

Ένα σύνολο είναι μια ομάδα χαρακτήρων μέσα σε ένα ζεύγος αγκυλών [] με ειδική σημασία:

ΣύνολοΠεριγραφή
[arn]Επιστρέφει έναν από τους χαρακτήρες “a”, “r”, ή “n”
[a-n]Επιστρέφει έναν από τους χαρακτήρες μεταξύ “a” και “n” (αλφαβητικά)
[^arn]Επιστρέφει οποιονδήποτε χαρακτήρα εκτός από “a”, “r” και “n”
[+]Σε αυτήν την περίπτωση, το σύμβολο “+” δεν έχει την κανονική του σημασία. Στη θέση αυτή, αναφέρεται στον ίδιο το χαρακτήρα “+”

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

8 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων