VBA Regex

Πίνακας περιεχομένων

Αυτό το σεμινάριο θα δείξει πώς να χρησιμοποιήσετε το Regex στο VBA.

Τι είναι το Regex;

Το Regex σημαίνει κανονική έκφραση. Μια κανονική έκφραση είναι ένα μοτίβο που αποτελείται από μια ακολουθία χαρακτήρων που μπορείτε να χρησιμοποιήσετε για να βρείτε ένα μοτίβο που ταιριάζει σε μια άλλη συμβολοσειρά. Για να χρησιμοποιήσετε το Regex στο VBA πρέπει να χρησιμοποιήσετε το αντικείμενο RegExp.

Ένα μοτίβο όπως το [A-C] μπορεί να χρησιμοποιηθεί για την αναζήτηση και αντιστοίχιση ενός κεφαλαίου γράμματος από το A στο C από μια ακολουθία. Τα μοτίβα Regex έχουν τη δική τους σύνταξη και μπορούν να δημιουργηθούν χρησιμοποιώντας έναν χαρακτήρα ή ακολουθία χαρακτήρων.

Αντιστοίχιση χαρακτήρων

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

Σύνταξη μοτίβου Περιγραφή Παράδειγμα Βρέθηκαν αγώνες
. Ταιριάζει με οποιονδήποτε χαρακτήρα εκτός από το vbNewLine στ.ν ανεμιστήρας, fon, f@n, fwn
[χαρακτήρες] Ταιριάζει με κάθε χαρακτήρα μεταξύ παρενθέσεων [] [fn] Θα ταιριάζει μόνο με "f" ή "n" στον ανεμιστήρα
[^χαρακτήρες] Ταιριάζει με κάθε μεμονωμένο χαρακτήρα που δεν βρίσκεται ανάμεσα σε αγκύλες [] [^fn] Έτσι θα ταιριάζει με το "j" στο "fjn"
[αρχή-τέλος] Ταιριάζει με κάθε χαρακτήρα που αποτελεί μέρος του εύρους σε αγκύλες [] [1-5] Θα ταιριάζει με "4" και "5" σε "45"
\ w Ταιριάζει με αλφαριθμητικούς χαρακτήρες και με την υπογράμμιση, αλλά όχι με τον χαρακτήρα χώρου \ w Θα ταιριάζει με το "c" στο ", c".
\ W Ταιριάζει με τυχόν μη αλφαριθμητικούς χαρακτήρες και την υπογράμμιση \ W Θα ταιριάζει με το "@" στο "bb@bb"
\μικρό Ταιριάζει με οποιονδήποτε χαρακτήρα λευκού χώρου, όπως κενά και καρτέλες \μικρό Θα ταιριάζει »" στο "Αυτό είναι"
\ΜΙΚΡΟ Ταιριάζει με κάθε χαρακτήρα μη λευκού χώρου \ΜΙΚΡΟ Θα ταιριάζει με "T" και "h" σε "T h"
\ρε Ταιριάζει με οποιοδήποτε δεκαδικό ψηφίο \ρε Θα ταιριάζει με το "7" σε "a7h"
\ΡΕ Ταιριάζει με οποιοδήποτε μεμονωμένο μη δεκαδικό ψηφίο \ΡΕ Θα ταιριάζει με το j στο "47j"
\ Ξεφεύγει από ειδικούς χαρακτήρες που σας επιτρέπουν στη συνέχεια να τους αναζητήσετε \. Θα ταιριάζει με "." στο "59.pQ"
\ t Αυτί \ t Θα ταιριάζει με έναν χαρακτήρα καρτέλας
\ r Επιστροφή μεταφοράς \ r Θα ταιριάζει με την επιστροφή μεταφοράς (vbCr)
\ n vbNewLine (vbTab) \ n Θα ταιριάζει με μια νέα γραμμή

Ποσοτικοποιητές

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

Ποσοτικοποιητής Περιγραφή Παράδειγμα Βρέθηκαν αγώνες
* Ταιριάζει με μηδενικές ή περισσότερες εμφανίσεις fn*a fna, fa, fnna, fnnna, fnfnnna
+ Ταιριάζει με μία ή περισσότερες εμφανίσεις fn+a φνα, φνα, φνφννα
? Ταιριάζει με μηδέν ή ένα fn; a φα, φνα
{n} Ταιριάζει με "n" πολλές φορές d \ W {4} Θα ταιριάζει με το «d…». στο "d…. & 5hi"
{n,} Ταιριάζει τουλάχιστον "n" πολλές φορές d \ W {4,} Θα ταιριάζει με "d…. &" Σε "d…. & 5hi"
{n, m} Ταιριάζει μεταξύ n και m πολλές φορές d \ W {1,8} Θα ταιριάζει με "d…. &&&&" στο "d…. &&&& 5hi"

Ομαδοποίηση

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

Πρότυπο Περιγραφή Παράδειγμα Βρέθηκαν και καταγράφηκαν αγώνες
(έκφραση) Ομαδοποιεί και αποτυπώνει το μοτίβο στην παρένθεση (\ Δ {4}) Θα ομαδοποιούσε και θα κατέγραφε το "@@@@" από το "1 @@@@ 1jlmba"

Πώς να χρησιμοποιήσετε το Regex στο VBA

Για να χρησιμοποιήσετε το Regex στο VBA, πρέπει πρώτα να ορίσετε την αναφορά στον επεξεργαστή VBE. Στο πρόγραμμα επεξεργασίας VBE, μεταβείτε στο Εργαλεία> Αναφορές> Κανονικές εκφράσεις Microsoft VBScript.

Αυτές είναι οι ιδιότητες του αντικειμένου RegExp:

  • Πρότυπο - Το μοτίβο που πρόκειται να χρησιμοποιήσετε για αντιστοίχιση με τη συμβολοσειρά.
  • IgnoreCase - Εάν είναι αληθές, τότε η αντιστοίχιση αγνοεί την πεζά γράμματα.
  • Παγκόσμια - Αν είναι True, τότε όλες οι αντιστοιχίσεις του μοτίβου στη συμβολοσειρά βρίσκονται. Αν είναι False τότε θα βρεθεί μόνο το πρώτο ταίριασμα.
  • MultiLine - Εάν είναι αληθές, η αντιστοίχιση μοτίβου συμβαίνει στα διαλείμματα γραμμών.

Αυτές είναι οι μέθοδοι του αντικειμένου RegExp:

  • Δοκιμή - Αναζητά ένα μοτίβο σε μια συμβολοσειρά και επιστρέφει True αν βρεθεί αντιστοίχιση.
  • Αντικαθιστώ - Αντικαθιστά τις εμφανίσεις του μοτίβου με τη συμβολοσειρά αντικατάστασης.
  • Εκτέλεση - Επιστρέφει αντιστοιχίες του μοτίβου έναντι της συμβολοσειράς.

Δοκιμάζοντας ένα μοτίβο για αντιστοιχία ενάντια σε μια συμβολοσειρά

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

12345678910111213 Sub RegexTestingAPattern ()Dim stringOne As StringDim regexOne As ObjectΟρισμός regexOne = Νέα RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)Τέλος υπο

Το αποτέλεσμα είναι:

Αντικατάσταση μοτίβου σε συμβολοσειρά

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

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectΟρισμός regexOne = Νέα RegExpregexOne.Pattern = "Αυτός είναι ο αριθμός"regexOne.Global = ΛάθοςstringOne = "Αυτός είναι ο αριθμός 718901"Debug.Print regexOne.Replace (stringOne, "Αυτός είναι ο νέος αριθμός")Τέλος υπο

Το αποτέλεσμα είναι:

Για να αντικαταστήσετε μόνο το αριθμητικό τμήμα της συμβολοσειράς που χρησιμοποιείται παραπάνω, θα χρησιμοποιήσετε τον ακόλουθο κώδικα:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectΟρισμός regexOne = Νέα RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = ΛάθοςstringOne = "Αυτός είναι ο αριθμός 718901"Debug.Print regexOne.Replace (stringOne, "777192")Τέλος υπο

Το αποτέλεσμα είναι:

Για να αντικαταστήσετε κάθε παρουσία ενός συγκεκριμένου μοτίβου σε μια συμβολοσειρά, θα ορίσετε την καθολική τιμή σε True. Ο παρακάτω κώδικας σάς δείχνει πώς μπορείτε να αντικαταστήσετε κάθε παρουσία του -A1289C- στη συμβολοσειρά:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne As ObjectΟρισμός regexOne = Νέα RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = ΑληθινόstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Τέλος υπο

Αντιστοίχιση και εμφάνιση μοτίβου σε συμβολοσειρά

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

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectΟρισμός regexOne = Νέα RegExpregexOne.Pattern = "A.C"regexOne.Global = ΑληθινόregexOne.IgnoreCase = Παράβλεψη CasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Ρύθμιση theMatches = regexOne.Execute (stringOne)Για κάθε αγώνα στους αγώνεςDebug.Print Match.ValueΕπόμενοΤέλος υπο

Το αποτέλεσμα είναι:

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

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectΟρισμός regexOne = Νέα RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = ΛάθοςregexOne.IgnoreCase = Παράβλεψη CasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Ορίστε theMatches = regexOne.Execute (stringOne)Για κάθε αγώνα στους αγώνεςDebug.Print Match.ValueΕπόμενοΤέλος υπο

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

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave