Γλωσσική Τεχνολογία. String Handling Regular Expressions

Σχετικά έγγραφα
Regular Expressions ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

String Handling ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

Ενότητα 3 1 Compiler Lecture Notes 1.0 documentation

Φροντιστήριο 1ο Εισαγωγή στο FLEX. Flex. Regular Expressions (1/4)

Κανονικές εκφράσεις ή παραστάσεις (Regular Expressions) 3 ο Εργαστήριο ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - ΕΡΓΑΣΤΗΡΙΟ

Εισαγωγή στα Λειτουργικά Συστήματα

(Regular Expressions) ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ/ ΧΕΙΜ

HY340, 2009 Α. Σαββίδης Slide 2 / 26. HY340, 2009 Α. Σαββίδης Slide 3 / 26. HY340, 2009 Α. Σαββίδης Slide 4 / 26

ΤΕΧΝΟΛΟΓΙΕΣ ΠΟΛΥΜΕΣΩΝ

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Θέματα Προγραμματισμού Η/Υ

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Fixed Character strings

Πληροφορική ΙΙ Θεματική Ενότητα 11

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ FILE & PROCESS HANDLING

Εισαγωγή στον Προγ/μό Υπολογιστών

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Ακολουθίες: Λίστες και Πλειάδες Χειμερινό Εξάμηνο 2016

Τι είναι το Flex. Περιγραφή ενός λεξικογραφικού αναλυτή στη γλώσσα του lex/flex. Γενικά Χαρακτηριστικά του Flex

File Handling & I/O ΓΛΩΣΣΙΚΉ ΤΕΧΝΟΛΟΓΊΑ

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

Επανάληψη για τις Τελικές εξετάσεις

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Πληροφορική ΙΙ Θεματική Ενότητα 4

Λειτουργικά Συστήματα 5η εργαστηριακή άσκηση

Σχεδίαση Γλωσσών Προγραμματισμού Λεξική Ανάλυση Ι. Εαρινό Εξάμηνο Lec 05 & & 26 /02/2019 Διδάσκων: Γεώργιος Χρ.

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αλφαριθμητικά Χειμερινό Εξάμηνο 2016

Προγραμματισμός Διαδικτύου

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Θέματα Προγραμματισμού Η/Υ

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

Ανάπτυξη και Σχεδίαση Λογισμικού

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Πληρουορική Γ Γσμμασίοσ

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Λίστες και Πλειάδες Χειµερινό Εξάµηνο 2014

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Γ τάξη Τεχνολογικής Κατεύθυνσης Ενιαίου Λυκείου ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. ΔΟΜΗ ΕΠΙΛΟΓΗΣ Διδάσκων: ΔΟΥΡΒΑΣ ΙΩΑΝΝΗΣ

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 5. Λεξικά (Dictionaries)

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Σημειωματάριο Δευτέρας 13 Νοε. 2017

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

ΚΕΦΑΛΑΙΟ 3. Εκφράσεις, τελεστές, σχόλια. 3.1 Εισαγωγή

Insert (P) : Προσθέτει ένα νέο πρότυπο P στο λεξικό D. Delete (P) : Διαγράφει το πρότυπο P από το λεξικό D

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση

Γλώσσα Προγραμματισμού C

Βασικές έννοιες προγραμματισμού

Εισαγωγή στο προγραμματισμό Η/Υ

Εισαγωγή στον Προγραμματισμό

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Εισαγωγή στην επιστήμη των υπολογιστών. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ και Μετατροπές Αριθμών

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Computing. Νοέμβριος Έκδοση 1.0

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

επιµέλεια Θοδωρής Πιερράτος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Διάλεξη 7 Εργαλεία Ωφελιμότητας Unix: Αwk

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

5. Επερώτηση XML Εγγράφων: Εισαγωγή στη Γλώσσα XQuery

JAVASCRIPT 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Η γλώσσα προγραμματισμού Strange

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Πρόλογος. if (παράσταση) εντολή1 else εντολή2. Από εδώ και πέρα θα αναφέρεται ως K&R.

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Γ2.1 Στοιχεία Αρχιτεκτονικής. Γ Λυκείου Κατεύθυνσης

Προγραμματισμός PASCAL

Μερικές άλλες χρήσιμες εντολές

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

Transcript:

Γλωσσική Τεχνολογία String Handling Regular Expressions

Strings - Δήλωση Μπορείτε να γράψετε τα δικά σας string περικλείοντας απλά χαρακτήρες και αριθμούς μέσα σε μονά ('...') ή διπλά("...") αυτάκια.

Strings - Τελεστές Μπορείτε να κάνετε χρήση των τελεστών + και * πάνω σε strings. + (concatenation) * (repetition)

Strings Δεικτες Ι Μπορείτε να φανταστείτε τα string σαν πίνακες χαρακτήρων της C. Ο πρώτος χαρακτήρας έχει δείκτη 0.

Strings Δεικτες ΙΙ Μπορείτε ακόμη να χρησιμοποιήσετε και αρνητικούς δείκτες.

Strings Δεικτες ΙΙΙ Γενικά η δεικτοδότηση στα strings έχει ως εξής:

Συναρτήσεις Αναζήτησης Ι str.count(sub[,start[,end]]) Επιστρέφει τις μη επικαλυπτόμενες εμφανίσεις του substring sub στο διάστημα (προαιρετικά) [start, end]. str.find(sub[,start[,end]]) Επιστρέφει τον μικρότερο δείκτη του string όπου το substring sub εμφανίζεται (προαιρετικά) στο διάστημα [start, end], διαφορετικά -1. str.index(sub[,start[,end]]) Όμοια με την find αλλά πετάει ValueError όταν δεν βρεθεί το substring sub.

Συναρτήσεις Αναζήτησης ΙΙ

Συναρτήσεις Ταυτοποίησης Ι str.startswith(prefix[,start[,end]]) Επιστρέφει boolean τιμή, ανάλογα με το αν το string ξεκινάει με το πρόθεμα prefix (προαιρετικά) στο διάστημα [start, end]. str.endswith(suffix[,start[,end]]) Επιστρέφει boolean τιμή, ανάλογα με το αν το string τελειώνει με το επίθεμα suffix (προαιρετικά) στο διάστημα [start, end]. Και στις δύο περιπτώσεις, τα prefix/suffix μπορεί να είναι tuple από προθέματα/επιθέματα, αντίστοιχα.

Συναρτήσεις Ταυτοποίησης ΙΙ

Συναρτήσεις Ταυτοποίησης ΙΙΙ str.isalnum() Επιστρέφει boolean ανάλογα με το αν το string περιέχει μόνο αλφαριθμητικούς χαρακτήρες και δεν είναι το κενό string. str.isalpha() Επιστρέφει boolean ανάλογα με το αν το string περιέχει μόνο αλφαβητικούς χαρακτήρες και δεν είναι το κενό string. str.isdigit() Επιστρέφει boolean ανάλογα με το αν το string περιέχει μόνο αριθμητικούς χαρακτήρες και δεν είναι το κενό string.

Συναρτήσεις Ταυτοποίησης IV str.isspace() Επιστρέφει boolean ανάλογα με το αν το string περιέχει μόνο κενούς χαρακτήρες και δεν είναι το κενό string. str.islower() Επιστρέφει boolean ανάλογα με το αν το string περιέχει μόνο lowercase χαρακτήρες και δεν είναι το κενό string. str.isupper() Επιστρέφει boolean ανάλογα με το αν το string περιέχει μόνο uppercase χαρακτήρες και δεν είναι το κενό string.

Συναρτήσεις Ταυτοποίησης V

Συναρτήσεις Μορφοποίησης Ι str.lower() Επιστρέφει ένα αντίγραφο του string με όλα του τα στοιχεία μικρά. str.upper() Επιστρέφει ένα αντίγραφο του string με όλα του τα στοιχεία κεφαλαία. str.capitalize() Επιστρέφει ένα αντίγραφο του string με το πρώτο του στοιχείο κεφαλαίο. str.title() Επιστρέφει ένα αντίγραφο του string με όλα τα πρώτα γράμματα κάθε λέξης κεφαλαία.

Συναρτήσεις Μορφοποίησης ΙΙ

Συναρτήσεις Αντικατάστασης str.replace(old,new[,count]) Επιστρέφει ένα αντίγραφο του string όπου το substring old έχει αντικατασταθεί από το substring new. Αν δοθεί το προαιρετικό όρισμα count, πραγματοποιούνται μόνο οι πρώτες count αλλαγές.

Συναρτήσεις Διαχωρισμού Ι str.split([sep[,maxsplit]]) Επιστρέφει μία λίστα από λέξεις του string χρησιμοποιώντας το sep ως delimeter. Αν δοθεί το προαιρετικό όρισμα maxsplit, τότε μόνο maxsplit κοψίματα πραγματοποιούνται. Έχει σημασία αν δοθεί ή όχι το όρισμα sep καθώς σε κάθε περίπτωση εκτελείται διαφορετικός αλγόριθμος. Αν δοθεί (μπορεί να είναι και παραπάνω από ένας χαρακτήρας), χρησιμοποιείται ως έχει, με την ιδιότητα ότι οι delimeters δεν ομαδοποιούνται. Αν όχι, χρησιμοποιείται ως separator το κενό, και με την ιδιότητα συνεχόμενα κενά μέσα στο string να λαμβάνονται ως ένα.

Συναρτήσεις Διαχωρισμού ΙΙ

Συναρτήσεις Συνένωσης str.join(seq) Επιστρέφει ένα string το οποίο είναι η συνένωση των strings της ακολουθίας seq. Όπου seq, μπορεί να είναι string, tuple, list, κτλ

Module StringIO import StringIO Με το παραπάνω module μπορεί κανείς να μεταχειριστεί τα strings σαν αρχεία, καθώς δύνεται δυνατότητα για ανάγνωση/εγγραφή ενός string buffer.

Regular Expressions - γενικά Βασική ιδέα: έχουμε ένα pattern και ένα κείμενο εισόδου. Εφαρμόζουμε το pattern στο κείμενο και μπορούμε: Να ελέγξουμε αν μέρος του κειμένου συμφωνεί με το pattern. Να εξάγουμε κομμάτια του κειμένου που επιθυμούμε Να αντικαταστήσουμε κομμάτια του κειμένου κλπ. Πολύ δυνατό εργαλείο διαχείρισης strings. Επιτρέπει τις λειτουργίες find και replace σε string, με πολύ περισσότερες δυνατότητες, όχι απλό string matching. Πολύ γρήγορα!!!

Regular Expressions #1 Pattern. Ταιριάζει σε οποιονδήποτε χαρακτήρα. πχ το pattern a.c ταιριάζει στα strings abc, a_c, afc, a0c κλπ ^ Ταιριάζει στην αρχή του string. πχ το pattern ^abc ταιριάζει στα strings που ξεκινούν από abc $ Ταιριάζει στο τέλος του string. πχ το pattern abc$ ταιριάζει στα strings που τελειώνουν με abc * Ταιριάζει σε 0 ή περισσότερες εμφανίσεις του pattern που προηγείται. πχ το pattern a* ταιριάζει στο άδειο string και στα a, aa, aaa, aaaa κλπ. + Ταιριάζει σε 1 ή περισσότερες εμφανίσεις του pattern που προηγείται. πχ το pattern a+ ταιριάζει στα a, aaa, aaaa, κλπ? Ταιριάζει σε 0 ή 1 εμφανίσεις του pattern που προηγείται. πχ το pattern a?bc ταιριάζει στα strings abc και bc {m} {m,n} Ταιριάζει σε m εμφανίσεις του pattern που προηγείται. πχ το pattern a{3} ταιριάζει στο string aaa Ταιριάζει σε m έως n εμφανίσεις του pattern που προηγείται. πχ το pattern a{1,3} ταιριάζει στα a, aa, aaa

Regular Expressions #2 Pattern [] Ταιριάζει σε σύνολο χαρακτήρων. πχ [0-9] είναι ένα οποιοδήποτε αριθμητικό ψηφίο. [a-za-z] ένα οποιοδήποτε γράμμα. [134] είναι ένα οποιοδήποτε ψηφίο από τα 1 3 ή 4. [0-9]+ ταιριάζει σε οποιονδήποτε ακέραιο [a-za-z]+ ταιριάζει σε οποιαδήποτε λέξη έχει μόνο γράμματα. [^ ] Ταιριάζει σε οτιδήποτε δεν περιέχεται στο σύνολο χαρακτήρων. πχ το [^0-9] ταιριάζει σε οτιδήποτε δεν είναι ψηφίο. x y ταιριάζει είτε στο x είτε στο y ( ) Ομαδοποίηση ενός υποσυνόλου του pattern. πχ (01)+ ταιριάζει στα strings 01,0101,010101 κλπ ενώ το 01+ ταιριάζει στα 01,011, 0111 κλπ \ Escape character. Αν θέλω να συμπεριλάβω κάποιον ειδικό χαρακτήρα για την τιμή του, χρησιμοποιώ τον escape. πχ το \+ ταιριάζει στον χαρακτήρα + και όχι σε επαναλήψεις του προηγούμενου.

Regular Expressions #3 Pattern \t Tab \n New line \s Ταιριάζει στα κενά. (whitespace, tab, new line κλπ) \d Ταιριάζει σε ψηφία. Ισοδύναμο με [0-9] \w Ταιριάζει σε ψηφία, γράμματα ή underscore. Ισοδύναμο με το [0-9a-zA-Z_]

Regular Expressions look(ahead behind) Pattern (?=pattern) Positive lookahead ταιριάζει με το string που ακολουθείται από το pattern που περιγράφεται. πχ το readme(?=\.txt) ταιριάζει με το readme μόνο αν έχει κατάληξη.txt Προσοχή: αυτό που ταιριάζει είναι το readme! Το.txt δεν καταναλώνεται! (?!pattern) (?<=pattern) (?<!pattern) Negative lookahead ταιριάζει με το string που δεν ακολουθείται από το pattern που περιγράφεται. Positive lookbehind ταιριάζει με το string από το οποίο προηγείται το pattern που περιγράφεται. πχ. το (?<=readme) \.txt ταιριάζει με το.txt μόνο αν προηγείται το readme. Negative lookbehind ταιριάζει με το string από το οποίο δεν προηγείται το pattern που περιγράφεται.

Python re module Module: re Υποστηρίζει: search match groups named groups

Python - examples re.search(pattern, input): Εφαρμόζει το pattern στο input Επιλογή και ανάκτηση του group χρησιμοποιώντας τις παρενθέσεις re.findall(pattern, input): Βρίσκει πολλαπλές εμφανίσεις στο input >>> import re >>> m = re.search('([a-za-z]+) ([a-za-z]+)', 'Stand back! I know regular expressions!') >>> m.group(0) 'Stand back' >>> m.group(1) 'Stand' >>> m.group(2) 'back' >>> lst = re.findall('[a-za-z]+','stand back! I know regular expressions!') >>> lst ['Stand', 'back', 'I', 'know', 'regular', 'expressions']

Python - examples >>> test = '000 001 010 011 100 101 110 111' >>> lst = re.findall('[01]{3}',test) >>> lst ['000', '001', '010', '011', '100', '101', '110', '111'] >>> lst = re.findall('[^ ]+',test) >>> lst ['000', '001', '010', '011', '100', '101', '110', '111'] >>> m = re.search('[0-9]+(\\.[0-9]+)?','6.23') >>> m.group(0) '6.23' >>> m = re.search('[0-9]+(\\.[0-9]+)?','166') >>> m.group(0) '166' >>> path = "C:\\Users\\Vivi\\test\\regex\\readme.txt" >>> lst = re.findall('[^\\\\]+',path) >>> lst ['C:', 'Users', 'Vivi', 'test', 'regex', 'readme.txt']

Escape Hell Τα regular expressions χρησιμοποιούν ως escape character το \. Το pattern είναι ένα string που γίνεται compile ανεξάρτητα από τη γλώσσα προγραμματισμού. Για να γραφτεί το \ σε string, η γλώσσα προγραμματισμού χρειάζεται το δικό της escape character που είναι το \! Παράδειγμα: Λύση: Το pattern \\\\ ταιριάζει με το χαρακτήρα \. Έχει ένα \ για το escape του regular expression και ένα επιπλέον για το escape του string. Προσοχή στο μέτρημα των escapes ή Χρήση raw strings για το pattern: >>> lst = re.findall(r'[^\\]+',path) >>> lst ['C:', 'Users', 'Vivi', 'test', 'regex', 'readme.txt']

Python match vs search Υποστηρίζονται δύο τρόποι ψαξίματος: re.search : ψάχνει σε οποιοδήποτε μέρος του string re.match : ψάχνει μόνο στην αρχή του string >>> re.match("c", "abcdef") # No match >>> re.search("c", "abcdef") # Match <_sre.sre_match object at...>

Python named groups Με τη χρήση του pattern (?P<a_name>pattern) η python υποστηρίζει named groups. >>> m = re.match(r"(?p<first_name>\w+) (?P<last_name>\w+)", "Malcom Reynolds") >>> m.group('first_name') 'Malcom' >>> m.group('last_name') 'Reynolds'

Regular Expressions - more Επιπλέον δυνατότητες των regular expressions: split σε input strings replace Επιλογές για το αν η είσοδος θα είναι multiline, το encoding κλπ....