Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο ExcelΜία από τις πιο χρονοβόρες και απογοητευτικές εργασίες κατά την εργασία με κείμενο στο Excel είναι τεχνολογία – αναλύοντας το αλφαριθμητικό «κουάκερ» σε συστατικά και εξάγοντας τα θραύσματα που χρειαζόμαστε από αυτό. Για παράδειγμα:

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

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

  • Χρήση ενσωματωμένες λειτουργίες κειμένου Excel για αναζήτηση-περικοπή-κόλληση κειμένου: ΛΕΒΣΙΜΒ (ΑΡΙΣΤΕΡΑ), ΔΙΚΑΙΩΜΑ (ΣΩΣΤΑ), PSTR (στα μέσα), STsEPIT (ΣΥΝΔΕΣΗ) και τα ανάλογα του, ΣΥΝΔΥΑΣΜΟΣ (ΚΟΙΝΟ ΚΕΙΜΕΝΟ), ΑΚΡΙΒΗΣ (ΑΚΡΙΒΗΣ) κ.λπ. Αυτή η μέθοδος είναι καλή εάν υπάρχει μια σαφής λογική στο κείμενο (για παράδειγμα, το ευρετήριο βρίσκεται πάντα στην αρχή της διεύθυνσης). Διαφορετικά, οι τύποι γίνονται πολύ πιο περίπλοκοι και, μερικές φορές, έρχεται ακόμη και σε τύπους πίνακα, κάτι που επιβραδύνει πολύ σε μεγάλα τραπέζια.
  • Χρησιμοποιώντας σαν τελεστής ομοιότητας κειμένου από τη Visual Basic τυλιγμένη σε μια προσαρμοσμένη συνάρτηση μακροεντολής. Αυτό σας επιτρέπει να εφαρμόσετε μια πιο ευέλικτη αναζήτηση χρησιμοποιώντας χαρακτήρες μπαλαντέρ (*, #,?, κ.λπ.) Δυστυχώς, αυτό το εργαλείο δεν μπορεί να εξαγάγει την επιθυμητή υποσυμβολοσειρά από το κείμενο - ελέγξτε μόνο εάν περιέχεται σε αυτήν.

Εκτός από τα παραπάνω, υπάρχει μια άλλη προσέγγιση που είναι πολύ γνωστή σε στενούς κύκλους επαγγελματιών προγραμματιστών, προγραμματιστών ιστού και άλλων τεχνικών – αυτή είναι κανονικές εκφράσεις (Κανονικές εκφράσεις = RegExp = "regexps" = "κανονικές"). Με απλά λόγια, Η RegExp είναι μια γλώσσα όπου χρησιμοποιούνται ειδικοί χαρακτήρες και κανόνες για την αναζήτηση των απαραίτητων υποσυμβολοσειρών στο κείμενο, την εξαγωγή τους ή την αντικατάστασή τους με άλλο κείμενο. Οι κανονικές εκφράσεις είναι ένα πολύ ισχυρό και όμορφο εργαλείο που ξεπερνά όλους τους άλλους τρόπους εργασίας με κείμενο κατά μια τάξη μεγέθους. Πολλές γλώσσες προγραμματισμού (C#, PHP, Perl, JavaScript…) και επεξεργαστές κειμένου (Word, Notepad++…) υποστηρίζουν κανονικές εκφράσεις.

Το Microsoft Excel δυστυχώς δεν διαθέτει υποστήριξη RegExp, αλλά αυτό μπορεί να διορθωθεί εύκολα με το VBA. Ανοίξτε το Visual Basic Editor από την καρτέλα προγραμματιστή (Προγραμματιστής) ή συντόμευση πληκτρολογίου άλλος+F11. Στη συνέχεια, εισάγετε τη νέα μονάδα μέσω του μενού Εισαγωγή – Ενότητα και αντιγράψτε το κείμενο της παρακάτω συνάρτησης μακροεντολής εκεί:

Δημόσια συνάρτηση RegExpExtract(Κείμενο ως συμβολοσειρά, μοτίβο ως συμβολοσειρά, προαιρετικό στοιχείο ως ακέραιος = 1) ως συμβολοσειρά σε σφάλμα Μετάβαση στο ErrHandl Ορισμός regex = CreateObject("VBScript.RegExp") regex.Μοτίβο = Μοτίβο regex.Global =TrueIf (Κείμενο) Κατόπιν Ορίστε αντιστοιχίσεις = regex.Execute(Text) RegExpExtract = matches.Item(Item - 1) Έξοδος συνάρτησης Τέλος Εάν ErrHandl: RegExpExtract = CVERr(xlErrValue) Τέλος συνάρτησης  

Μπορούμε τώρα να κλείσουμε το πρόγραμμα επεξεργασίας της Visual Basic και να επιστρέψουμε στο Excel για να δοκιμάσουμε τη νέα μας δυνατότητα. Η σύνταξή του είναι η εξής:

=RegExpExtract(Txt; Pattern; Item)

όπου

  • txt – ένα κελί με το κείμενο που ελέγχουμε και από το οποίο θέλουμε να εξαγάγουμε την υποσυμβολοσειρά που χρειαζόμαστε
  • πρότυπο – μάσκα (μοτίβο) για αναζήτηση υποσυμβολοσειράς
  • Είδος – τον ​​αριθμό ακολουθίας της υποσυμβολοσειράς που πρόκειται να εξαχθεί, εάν υπάρχουν πολλές από αυτές (αν δεν καθορίζεται, εμφανίζεται η πρώτη εμφάνιση)

Το πιο ενδιαφέρον εδώ, φυσικά, είναι το Pattern – μια σειρά προτύπων ειδικών χαρακτήρων «στη γλώσσα» του RegExp, που καθορίζει τι ακριβώς και πού θέλουμε να βρούμε. Εδώ είναι τα πιο βασικά για να ξεκινήσετε:

 πρότυπο  Περιγραφή
 . Το πιο απλό είναι μια τελεία. Ταιριάζει με οποιονδήποτε χαρακτήρα στο μοτίβο στην καθορισμένη θέση.
 s Κάθε χαρακτήρας που μοιάζει με κενό (κενό διάστημα, καρτέλα ή αλλαγή γραμμής).
 S
Μια αντι-παραλλαγή του προηγούμενου μοτίβου, δηλαδή οποιοσδήποτε χαρακτήρας χωρίς κενό.
 d
Οποιοσδηποτε ΑΡΙΘΜΟΣ
 D
Μια αντιπαραλλαγή της προηγούμενης, δηλαδή οποιοδήποτε ΝΟΤ ψηφίο
 w Οποιοσδήποτε λατινικός χαρακτήρας (AZ), ψηφίο ή κάτω παύλα
 W Μια αντιπαραλλαγή της προηγούμενης, δηλαδή όχι λατινικά, ούτε αριθμός και ούτε υπογράμμιση.
[χαρακτήρες] Σε αγκύλες, μπορείτε να καθορίσετε έναν ή περισσότερους χαρακτήρες που επιτρέπονται στην καθορισμένη θέση στο κείμενο. Για παράδειγμα Τέχνη θα ταιριάζει με οποιαδήποτε από τις λέξεις: τραπέζι or καρέκλα.

Μπορείτε επίσης να μην απαριθμήσετε χαρακτήρες, αλλά να τους ορίσετε ως ένα εύρος που χωρίζεται με παύλα, δηλαδή αντί για [ABDCDEF] γράφω [AF]. ή αντ' αυτού [4567] εισαγάγει [-4 7]. Για παράδειγμα, για να ορίσετε όλους τους κυριλλικούς χαρακτήρες, μπορείτε να χρησιμοποιήσετε το πρότυπο [a-yaA-YayoYo].

[^χαρακτήρες] Εάν μετά την αρχική αγκύλη προσθέσετε το σύμβολο "καπάκι" ^, τότε το σύνολο θα αποκτήσει το αντίθετο νόημα - στην καθορισμένη θέση στο κείμενο, θα επιτρέπονται όλοι οι χαρακτήρες, εκτός από αυτούς που αναφέρονται. Ναι, πρότυπο [^ЖМ]ut Θα βρείτε μονοπάτι or Ουσία or ξεχάστε, Αλλά όχι Τρομακτικός or Mut, π.χ.
 | Boolean τελεστής OR (Ή) για να ελέγξετε για οποιοδήποτε από τα καθορισμένα κριτήρια. Για παράδειγμα (απόΠέμακόμη|τιμολόγιο) θα αναζητήσει στο κείμενο οποιαδήποτε από τις καθορισμένες λέξεις. Συνήθως, ένα σύνολο επιλογών περικλείεται σε παρένθεση.
 ^ Αρχή γραμμής
 $ Τέλος γραμμής
 b Τέλος της λέξης

Αν ψάχνουμε για έναν συγκεκριμένο αριθμό χαρακτήρων, για παράδειγμα, έναν εξαψήφιο ταχυδρομικό κώδικα ή και τους κωδικούς προϊόντων τριών γραμμάτων, τότε ερχόμαστε στη διάσωση ποσοτικοποιητές or ποσοτικοποιητές είναι ειδικές εκφράσεις που καθορίζουν τον αριθμό των χαρακτήρων προς αναζήτηση. Οι ποσοτικοί δείκτες εφαρμόζονται στον χαρακτήρα που εμφανίζεται πριν από αυτόν:

  Κβαντόρ  Περιγραφή
 ? Μηδέν ή ένα περιστατικό. Για παράδειγμα .? θα σημαίνει οποιονδήποτε χαρακτήρα ή την απουσία του.
 + Μία ή περισσότερες συμμετοχές. Για παράδειγμα d+ σημαίνει οποιονδήποτε αριθμό ψηφίων (δηλαδή οποιονδήποτε αριθμό μεταξύ 0 και άπειρου).
 * Μηδενικές ή περισσότερες εμφανίσεις, δηλαδή οποιαδήποτε ποσότητα. Έτσι s* σημαίνει οποιονδήποτε αριθμό διαστημάτων ή καθόλου κενά.
{αριθμός} or

{αριθμός1,αριθμός2}

Εάν πρέπει να καθορίσετε έναν αυστηρά καθορισμένο αριθμό εμφανίσεων, τότε προσδιορίζεται σε σγουρά τιράντες. Για παράδειγμα δ{6} σημαίνει αυστηρά έξι ψηφία και το μοτίβο s{2,5} – δύο έως πέντε θέσεις

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

Εξαγωγή αριθμών από κείμενο

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

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Η λογική πίσω από την κανονική έκφραση είναι απλή: d σημαίνει οποιοδήποτε ψηφίο και ο ποσοτικός + λέει ότι ο αριθμός τους πρέπει να είναι ένας ή περισσότεροι. Το διπλό μείον μπροστά από τη συνάρτηση απαιτείται για τη μετατροπή των χαρακτήρων που έχουν εξαχθεί σε έναν πλήρη αριθμό από τον αριθμό ως κείμενο.

Ταχυδρομικός κώδικας

Με την πρώτη ματιά, όλα είναι απλά εδώ – αναζητούμε ακριβώς έξι ψηφία στη σειρά. Χρησιμοποιούμε έναν ειδικό χαρακτήρα d για ψηφίο και ποσοτικό 6 {} για τον αριθμό των χαρακτήρων:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

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

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

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

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Τηλέφωνο Επικοινωνίας

Το πρόβλημα με την εύρεση ενός αριθμού τηλεφώνου στο κείμενο είναι ότι υπάρχουν τόσες πολλές επιλογές για τη σύνταξη αριθμών – με και χωρίς παύλες, μέσα από κενά, με ή χωρίς κωδικό περιοχής σε αγκύλες κ.λπ. Επομένως, κατά τη γνώμη μου, είναι ευκολότερο να πρώτα καθαρίστε όλους αυτούς τους χαρακτήρες από το κείμενο προέλευσης χρησιμοποιώντας διάφορες ένθετες συναρτήσεις ΥΠΟΚΑΤΑΣΤΑΤΟ (ΥΠΟΚΑΤΑΣΤΑΤΟ)ώστε να κολλήσει μαζί σε ένα ενιαίο σύνολο, και μετά με ένα πρωτόγονο κανονικό δ{11} τραβήξτε 11 ψηφία στη σειρά:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

ΙΤΝ

Εδώ είναι λίγο πιο περίπλοκο, γιατί ο ΑΦΜ (στη χώρα μας) μπορεί να είναι 10ψήφιος (για νομικά πρόσωπα) ή 12ψήφιος (για φυσικά πρόσωπα). Εάν δεν βρίσκετε λάθος ειδικά, τότε είναι πολύ πιθανό να είστε ικανοποιημένοι με το κανονικό δ{10,12}, αλλά, αυστηρά μιλώντας, θα βγάλει όλους τους αριθμούς από 10 έως 12 χαρακτήρες, δηλαδή και εισάγει λανθασμένα 11 ψηφία. Θα ήταν πιο σωστό να χρησιμοποιηθούν δύο μοτίβα που συνδέονται με έναν λογικό τελεστή OR | (κάθετη μπάρα):

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Λάβετε υπόψη ότι στο ερώτημα πρώτα αναζητούμε αριθμούς 12 bit και μόνο μετά για αριθμούς 10 bit. Αν γράψουμε την κανονική μας έκφραση αντίστροφα, τότε θα βγάλει για όλους, ακόμη και μεγάλους TIN 12 bit, μόνο τους πρώτους 10 χαρακτήρες. Δηλαδή, μετά την ενεργοποίηση της πρώτης συνθήκης, δεν εκτελείται πλέον περαιτέρω επαλήθευση:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

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

SKU προϊόντος

Σε πολλές εταιρείες, τα μοναδικά αναγνωριστικά εκχωρούνται σε αγαθά και υπηρεσίες – άρθρα, κωδικούς SAP, SKU κ.λπ. Εάν υπάρχει λογική στη σημείωση τους, τότε μπορούν εύκολα να εξαχθούν από οποιοδήποτε κείμενο χρησιμοποιώντας κανονικές εκφράσεις. Για παράδειγμα, αν γνωρίζουμε ότι τα άρθρα μας αποτελούνται πάντα από τρία κεφαλαία αγγλικά γράμματα, μια παύλα και έναν επόμενο τριψήφιο αριθμό, τότε:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Η λογική πίσω από το πρότυπο είναι απλή. [ΑΖ] – σημαίνει οποιαδήποτε κεφαλαία γράμματα του λατινικού αλφαβήτου. Ο επόμενος ποσοτικός δείκτης 3 {} λέει ότι είναι σημαντικό για εμάς να υπάρχουν ακριβώς τρία τέτοια γράμματα. Μετά την παύλα, περιμένουμε τρία ψηφία, οπότε προσθέτουμε στο τέλος δ{3}

Ταμειακά ποσά

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

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

πρότυπο d με ποσοτικοποιητή + αναζητά οποιονδήποτε αριθμό μέχρι παύλα και δ{2} θα ψάξει για πένες (διψήφιο) μετά.

Εάν χρειάζεται να εξαγάγετε όχι τιμές, αλλά ΦΠΑ, τότε μπορείτε να χρησιμοποιήσετε το τρίτο προαιρετικό όρισμα της συνάρτησης RegExpExtract, το οποίο καθορίζει τον τακτικό αριθμό του στοιχείου που θα εξαχθεί. Και, φυσικά, μπορείτε να αντικαταστήσετε τη λειτουργία ΥΠΟΚΑΤΑΣΤΑΤΟ (ΥΠΟΚΑΤΑΣΤΑΤΟ) Στα αποτελέσματα, βάλτε παύλα στο τυπικό δεκαδικό διαχωριστικό και προσθέστε ένα διπλό μείον στην αρχή, έτσι ώστε το Excel να ερμηνεύσει τον ΦΠΑ που βρέθηκε ως κανονικό αριθμό:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Αριθμοί πινακίδων αυτοκινήτου

Εάν δεν παίρνετε ειδικά οχήματα, ρυμουλκούμενα και άλλες μοτοσικλέτες, τότε ο τυπικός αριθμός αυτοκινήτου αναλύεται σύμφωνα με την αρχή "γράμμα - τρεις αριθμοί - δύο γράμματα - κωδικός περιοχής". Επιπλέον, ο κωδικός περιοχής μπορεί να είναι 2- ή 3-ψήφιος και μόνο εκείνοι που έχουν παρόμοια εμφάνιση με το λατινικό αλφάβητο χρησιμοποιούνται ως γράμματα. Έτσι, η ακόλουθη κανονική έκφραση θα μας βοηθήσει να εξαγάγουμε αριθμούς από το κείμενο:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Χρόνος

Για να εξαγάγετε την ώρα σε μορφή HH:MM, είναι κατάλληλη η ακόλουθη τυπική έκφραση:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Μετά από κόλον θραύσμα [0-5]ημΤο , όπως είναι εύκολο να καταλάβει κανείς, ορίζει οποιονδήποτε αριθμό στο εύρος 00-59. Πριν από την άνω και κάτω τελεία στην παρένθεση, λειτουργούν δύο μοτίβα, που χωρίζονται από ένα λογικό OR (σωλήνα):

  • [0-1]ημ – οποιοσδήποτε αριθμός στο εύρος 00-19
  • 2[0-3] – οποιοσδήποτε αριθμός στο εύρος 20-23

Στο αποτέλεσμα που προκύπτει, μπορείτε επιπλέον να εφαρμόσετε την τυπική συνάρτηση Excel TIME (ΟΜΑΔΑ)για να το μετατρέψετε σε μορφή χρόνου που είναι κατανοητή από το πρόγραμμα και κατάλληλη για περαιτέρω υπολογισμούς.

Έλεγχος κωδικού πρόσβασης

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

Ο έλεγχος μπορεί να οργανωθεί χρησιμοποιώντας την ακόλουθη απλή τυπική έκφραση:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Στην πραγματικότητα, με ένα τέτοιο μοτίβο απαιτούμε ότι μεταξύ της αρχής (^) και τέλος ($) στο κείμενό μας υπήρχαν μόνο χαρακτήρες από το σύνολο που δίνονται σε αγκύλες. Εάν πρέπει επίσης να ελέγξετε το μήκος του κωδικού πρόσβασης (για παράδειγμα, τουλάχιστον 6 χαρακτήρες), τότε ο ποσοτικός + μπορεί να αντικατασταθεί από το διάστημα "έξι ή περισσότερα" στη φόρμα {6,}:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Πόλη από τη διεύθυνση

Ας υποθέσουμε ότι πρέπει να βγάλουμε την πόλη από τη γραμμή διευθύνσεων. Το κανονικό πρόγραμμα θα βοηθήσει, εξάγοντας το κείμενο από το "g". στο επόμενο κόμμα:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Ας ρίξουμε μια πιο προσεκτική ματιά σε αυτό το μοτίβο.

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

Οι επόμενοι δύο χαρακτήρες στο πρότυπό μας, η τελεία και ο ποσοτικός αστερίσκος, αντιπροσωπεύουν οποιονδήποτε αριθμό χαρακτήρων, δηλαδή οποιοδήποτε όνομα πόλης.

Υπάρχει ένα κόμμα στο τέλος του προτύπου, επειδή αναζητούμε κείμενο από το "g". σε κόμμα. Αλλά μπορεί να υπάρχουν πολλά κόμματα στο κείμενο, σωστά; Όχι μόνο μετά την πόλη, αλλά και μετά το δρόμο, τα σπίτια κλπ. Σε ποια από αυτά θα σταματήσει το αίτημά μας; Για αυτό είναι το ερωτηματικό. Χωρίς αυτό, η κανονική μας έκφραση θα έβγαζε τη μεγαλύτερη δυνατή συμβολοσειρά:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Όσον αφορά τις κανονικές εκφράσεις, ένα τέτοιο μοτίβο είναι "άπληστο". Για να διορθωθεί η κατάσταση, χρειάζεται ένα ερωτηματικό – κάνει τον ποσοτικό δείκτη μετά τον οποίο είναι «τσιγκούνης» – και το ερώτημά μας παίρνει το κείμενο μόνο μέχρι το πρώτο μετρητικό κόμμα μετά το «g».:

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

Όνομα αρχείου από την πλήρη διαδρομή

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

Ανάλυση κειμένου με κανονικές εκφράσεις (RegExp) στο Excel

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

PS

«Προς το τέλος» θέλω να διευκρινίσω ότι όλα τα παραπάνω είναι ένα μικρό μέρος όλων των δυνατοτήτων που παρέχουν οι κανονικές εκφράσεις. Υπάρχουν πολλοί ειδικοί χαρακτήρες και κανόνες για τη χρήση τους και έχουν γραφτεί ολόκληρα βιβλία για αυτό το θέμα (προτείνω τουλάχιστον αυτό για αρχή). Κατά κάποιο τρόπο, το να γράφεις κανονικές εκφράσεις είναι σχεδόν τέχνη. Σχεδόν πάντα, μια επινοημένη κανονική έκφραση μπορεί να βελτιωθεί ή να συμπληρωθεί, καθιστώντας την πιο κομψή ή ικανή να λειτουργεί με ένα ευρύτερο φάσμα δεδομένων εισόδου.

Για να αναλύσετε και να αναλύσετε τις κανονικές εκφράσεις άλλων ανθρώπων ή να διορθώσετε τις δικές σας, υπάρχουν πολλές εύχρηστες διαδικτυακές υπηρεσίες: RegEx101, RegExr και περισσότερο

Δυστυχώς, δεν υποστηρίζονται όλες οι δυνατότητες των κλασικών τυπικών εκφράσεων στο VBA (για παράδειγμα, αντίστροφη αναζήτηση ή κλάσεις POSIX) και μπορούν να λειτουργήσουν με κυριλλικό, αλλά νομίζω ότι ό,τι υπάρχει είναι αρκετό για την πρώτη φορά για να σας ευχαριστήσει.

Εάν δεν είστε νέοι στο θέμα και έχετε κάτι να μοιραστείτε, αφήστε τις συνήθεις εκφράσεις χρήσιμες όταν εργάζεστε στο Excel στα παρακάτω σχόλια. Ένα μυαλό είναι καλό, αλλά δύο μπότες είναι ένα ζευγάρι!

  • Αντικατάσταση και καθαρισμός κειμένου με τη λειτουργία SUBSTITUTE
  • Αναζήτηση και επισήμανση λατινικών χαρακτήρων σε κείμενο
  • Αναζήτηση για το πλησιέστερο παρόμοιο κείμενο (Ivanov = Ivonov = Ivanof, κ.λπ.)

Αφήστε μια απάντηση