Regex για την αφαίρεση ορισμένων χαρακτήρων ή κειμένου στο Excel

  • Μοιραστείτε Αυτό
Michael Brown

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

Σκεφτήκατε ποτέ πόσο ισχυρό θα ήταν το Excel αν κάποιος μπορούσε να εμπλουτίσει την εργαλειοθήκη του με κανονικές εκφράσεις; Εμείς όχι μόνο το σκεφτήκαμε, αλλά και δουλέψαμε πάνω σε αυτό :) Και τώρα, μπορείτε να προσθέσετε αυτή την υπέροχη λειτουργία RegEx στα δικά σας βιβλία εργασίας και να σβήσετε υποσύνολα που ταιριάζουν σε ένα μοτίβο σε χρόνο μηδέν!

Την περασμένη εβδομάδα, εξετάσαμε πώς να χρησιμοποιούμε κανονικές εκφράσεις για την αντικατάσταση συμβολοσειρών στο Excel. Για το σκοπό αυτό, δημιουργήσαμε μια προσαρμοσμένη συνάρτηση Regex Replace. Όπως αποδείχθηκε, η συνάρτηση ξεπερνά την πρωταρχική της χρήση και μπορεί όχι μόνο να αντικαταστήσει συμβολοσειρές αλλά και να τις αφαιρέσει. Πώς θα μπορούσε να γίνει αυτό; Από την άποψη του Excel, η αφαίρεση μιας τιμής δεν είναι τίποτα άλλο από την αντικατάστασή της με μια κενή συμβολοσειρά, κάτι που η συνάρτηση Regex μας είναιπολύ καλός!

    Συνάρτηση VBA RegExp για την αφαίρεση υποσυνόλων στο Excel

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

    Η συνάρτηση έχει την ακόλουθη σύνταξη:

    RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

    Τα τρία πρώτα ορίσματα είναι υποχρεωτικά, ενώ τα δύο τελευταία είναι προαιρετικά.

    Πού:

    • Κείμενο - η συμβολοσειρά κειμένου για αναζήτηση.
    • Μοτίβο - η κανονική έκφραση για την αναζήτηση.
    • Αντικατάσταση - το κείμενο που θα αντικατασταθεί με. αφαίρεση υποσυνόλων που ταιριάζει με το μοτίβο, χρησιμοποιήστε ένα κενή συμβολοσειρά ("") για αντικατάσταση.
    • Instance_num (προαιρετικό) - η περίπτωση προς αντικατάσταση. Εάν παραλειφθεί, αντικαθίστανται όλα τα ευρεθέντα αποτελέσματα (προεπιλογή).
    • Match_case (προαιρετικό) - μια τιμή Boolean που υποδεικνύει αν θα ταιριάζει ή θα αγνοεί την πεζότητα του κειμένου. Για αντιστοίχιση με ευαισθησία στην πεζότητα, χρησιμοποιήστε TRUE (προεπιλογή), για αντιστοίχιση χωρίς ευαισθησία στην πεζότητα - FALSE.

    Για περισσότερες πληροφορίες, ανατρέξτε στη λειτουργία RegExpReplace.

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

    Πώς να αφαιρέσετε συμβολοσειρές χρησιμοποιώντας κανονικές εκφράσεις - παραδείγματα

    Όπως αναφέρθηκε παραπάνω, για να αφαιρέσετε τμήματα κειμένου που ταιριάζουν με ένα μοτίβο, πρέπει να τα αντικαταστήσετε με μια κενή συμβολοσειρά. Έτσι, ένας γενικός τύπος παίρνει αυτή τη μορφή:

    RegExpReplace(text, pattern, "", [instance_num], [match_case])

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

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

    Η συνάρτηση RegExpReplace έχει σχεδιαστεί για να βρίσκει όλες τις υποομάδες που ταιριάζουν σε μια δεδομένη regex. Το ποιες εμφανίσεις θα αφαιρεθούν ελέγχεται από το 4ο προαιρετικό όρισμα, που ονομάζεται instance_num .

    Η προεπιλογή είναι "όλες οι αντιστοιχίες" - όταν το instance_num Για να διαγράψετε μια συγκεκριμένη αντιστοιχία, ορίστε τον αριθμό της περίπτωσης.

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

    Μοτίβο : #\d{5}\b

    Το όριο λέξης \b καθορίζει ότι μια υποοδηγία που ταιριάζει δεν μπορεί να είναι μέρος μιας μεγαλύτερης συμβολοσειράς, όπως η #10000001.

    Για να αφαιρέσετε όλες τις αντιστοιχίες, το instance_num δεν έχει οριστεί:

    =RegExpReplace(A5, "#\d{5}\b", "")

    Για να εξαλείψουμε μόνο την πρώτη εμφάνιση, ορίζουμε το instance_num σε 1:

    =RegExpReplace(A5, "#\d{5}\b", "", 1)

    Regex για την αφαίρεση ορισμένων χαρακτήρων

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

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

    Μοτίβο : \(

    =RegExpReplace(A5, "\(

    Το αποτέλεσμα αυτής της λειτουργίας είναι ένας 10ψήφιος αριθμός όπως "1234567890".

    Για λόγους ευκολίας, μπορείτε να εισαγάγετε το regex σε ένα ξεχωριστό κελί και να αναφερθείτε σε αυτό το κελί χρησιμοποιώντας μια απόλυτη αναφορά, όπως $A$2:

    =RegExpReplace(A5, $A$2, "")

    Και στη συνέχεια, μπορείτε να τυποποιήσετε τη μορφοποίηση με τον τρόπο που θέλετε χρησιμοποιώντας τον τελεστή συνένωσης (&) και συναρτήσεις κειμένου όπως RIGHT, MID και LEFT.

    Για παράδειγμα, για να γράψετε όλους τους τηλεφωνικούς αριθμούς σε μορφή (123) 456-7890, ο τύπος είναι:

    ="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)

    Όπου B5 είναι η έξοδος της συνάρτησης RegExpReplace.

    Αφαίρεση ειδικών χαρακτήρων με χρήση regex

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

    Το μοτίβο βασίζεται σε αρνητικές κατηγορίες χαρακτήρων - μια καρέτα τοποθετείται μέσα σε μια κατηγορία χαρακτήρων [^ ] για να ταιριάξει με οποιονδήποτε μεμονωμένο χαρακτήρα ΟΧΙ μέσα σε αγκύλες. Ο ποσοδείκτης + το αναγκάζει να θεωρεί τους διαδοχικούς χαρακτήρες ως ένα ενιαίο ταίριασμα, έτσι ώστε η αντικατάσταση να γίνεται για μια υποσειρά που ταιριάζει και όχι για κάθε μεμονωμένο χαρακτήρα.

    Ανάλογα με τις ανάγκες σας, επιλέξτε ένα από τα ακόλουθα regexes.

    Για να αφαιρέσετε μη αλφαριθμητικά χαρακτήρες, δηλαδή όλοι οι χαρακτήρες εκτός από τα γράμματα και τα ψηφία:

    Μοτίβο : [^0-9a-zA-Z]+

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

    Μοτίβο : [^0-9a-zA-Z ]+

    Για να διαγράψετε όλους τους χαρακτήρες εκτός από τα γράμματα , ψηφία και υπογράμμιση , μπορείτε να χρησιμοποιήσετε \W που σημαίνει οποιονδήποτε χαρακτήρα που ΔΕΝ είναι αλφαριθμητικός ή υπογράμμισης:

    Μοτίβο : \W+

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

    Για παράδειγμα, για να αφαιρέσετε οποιονδήποτε χαρακτήρα εκτός από γράμμα, ψηφίο, τελεία, κόμμα ή κενό, χρησιμοποιήστε την ακόλουθη regex:

    Μοτίβο : [^0-9a-zA-Z\., ]+

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

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

    =RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")

    Ή απλά χρησιμοποιήστε την εγγενή συνάρτηση TRIM με το ίδιο αποτέλεσμα:

    =TRIM(RegExpReplace(A5, $A$2, ""))

    Regex για την αφαίρεση μη αριθμητικών χαρακτήρων

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

    Ταιριάζει με οποιονδήποτε χαρακτήρα που ΔΕΝ είναι ψηφίο:

    Μοτίβο : \D+

    Απογύμνωση μη αριθμητικών χαρακτήρων με χρήση αρνητικών κλάσεων:

    Μοτίβο : [^0-9]+

    Μοτίβο : [^\d]+

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

    Regex για να αφαιρέσετε τα πάντα μετά το διάστημα

    Για να διαγράψετε τα πάντα μετά από ένα κενό, χρησιμοποιήστε είτε τον χαρακτήρα κενό ( ) είτε τον χαρακτήρα κενό (\s) για να βρείτε το πρώτο κενό και το .* για να ταιριάξετε όλους τους χαρακτήρες μετά από αυτό.

    Εάν έχετε συμβολοσειρές μίας γραμμής που περιέχουν μόνο κανονικά κενά (τιμή 32 στο σύστημα ASCII των 7 bit), δεν έχει σημασία ποια από τις παρακάτω regexes χρησιμοποιείτε. Στην περίπτωση συμβολοσειρών πολλών γραμμών, έχει σημασία.

    Για να αφαιρέσετε τα πάντα μετά από έναν χαρακτήρα διαστήματος , χρησιμοποιήστε αυτό το regex:

    Μοτίβο : " .*"

    =RegExpReplace(A5, " .*", "")

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

    Για να γδύσουμε τα πάντα μετά από ένα κενό διάστημα (συμπεριλαμβανομένου του διαστήματος, της καρτέλας, του carriage return και της νέας γραμμής), η regex είναι:

    Μοτίβο : \s.*

    =RegExpReplace(A5, "\s.*", "")

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

    Regex για την αφαίρεση κειμένου μετά από συγκεκριμένο χαρακτήρα

    Χρησιμοποιώντας τις μεθόδους από το προηγούμενο παράδειγμα, μπορείτε να διαγράψετε κείμενο μετά από οποιονδήποτε χαρακτήρα που καθορίζετε.

    Για να χειριστείτε κάθε γραμμή ξεχωριστά:

    Γενικό μοτίβο : char.*

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

    Για να επεξεργαστείτε όλες τις γραμμές ως μια ενιαία συμβολοσειρά:

    Γενικό μοτίβο : char(.

    Για να διαγράψετε οτιδήποτε μετά από έναν συγκεκριμένο χαρακτήρα, συμπεριλαμβανομένων των νέων γραμμών, προστίθεται \n στο μοτίβο.

    Για παράδειγμα, για να αφαιρέσετε το κείμενο μετά το πρώτο κόμμα σε μια συμβολοσειρά, δοκιμάστε αυτές τις κανονικές εκφράσεις:

    Μοτίβο : ,.*

    Μοτίβο : ,(.

    Στο στιγμιότυπο οθόνης που ακολουθεί, μπορείτε να εξετάσετε πώς διαφέρουν τα αποτελέσματα.

    Regex για να αφαιρέσετε τα πάντα πριν από το διάστημα

    Όταν εργάζεστε με μεγάλες σειρές κειμένου, μπορεί μερικές φορές να θέλετε να τις κάνετε πιο σύντομες αφαιρώντας το ίδιο μέρος της πληροφορίας σε όλα τα κελιά. Παρακάτω θα συζητήσουμε δύο τέτοιες περιπτώσεις.

    Αφαιρέστε τα πάντα πριν από το τελευταίο κενό

    Όπως και στο προηγούμενο παράδειγμα, μια κανονική έκφραση εξαρτάται από την κατανόηση του "κενό".

    Για να ταιριάξετε οτιδήποτε με το τελευταίο διάστημα , αυτό το regex θα κάνει (τα εισαγωγικά προστίθενται για να γίνει αντιληπτό το κενό μετά από έναν αστερίσκο).

    Μοτίβο : ".* "

    Για να ταιριάξετε οτιδήποτε πριν από το τελευταίο κενό διάστημα (συμπεριλαμβανομένου του διαστήματος, της καρτέλας, του carriage return και της νέας γραμμής), χρησιμοποιήστε αυτή την κανονική έκφραση.

    Μοτίβο : .*\s

    Η διαφορά είναι ιδιαίτερα αισθητή σε συμβολοσειρές πολλών γραμμών.

    Αφαιρέστε τα πάντα πριν από το πρώτο κενό

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

    Μοτίβο : ^[^ ]* +

    Από την αρχή μιας συμβολοσειράς ^, αντιστοιχούμε σε μηδέν ή περισσότερους μη διαστημικούς χαρακτήρες [^ ]* που ακολουθούνται αμέσως από ένα ή περισσότερα διαστήματα " +". Το τελευταίο μέρος προστίθεται για να αποτρέψει πιθανά κενά στην αρχή των αποτελεσμάτων.

    Για την αφαίρεση του κειμένου πριν από το πρώτο κενό σε κάθε γραμμή, ο τύπος γράφεται στην προεπιλεγμένη λειτουργία "όλες οι αντιστοιχίες" ( instance_num παραλείπεται):

    =RegExpReplace(A5, "^[^ ]* +", "")

    Για να διαγράψετε κείμενο πριν από το πρώτο κενό στην πρώτη γραμμή και να αφήσετε όλες τις άλλες γραμμές άθικτες, η εντολή instance_num τίθεται σε 1:

    =RegExpReplace(A5, "^[^ ]* +", "", 1)

    Regex για να αφαιρέσετε τα πάντα πριν από τον χαρακτήρα

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

    Γενικό μοτίβο : ^[^char]*char

    Μεταφρασμένο σε ανθρώπινη γλώσσα, λέει: "από την αρχή μιας συμβολοσειράς που εδράζεται με ^, ταιριάζει με 0 ή περισσότερους χαρακτήρες εκτός από char [^char]* μέχρι την πρώτη εμφάνιση του char .

    Για παράδειγμα, για να διαγράψετε όλο το κείμενο πριν από την πρώτη άνω και κάτω τελεία, χρησιμοποιήστε αυτή την κανονική έκφραση:

    Μοτίβο : ^[^:]*:

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

    Μοτίβο : ^[^:]*:\s*

    =RegExpReplace(A5, "^[^:]*:\s*", "")

    Συμβουλή. Εκτός από τις κανονικές εκφράσεις, το Excel διαθέτει τα δικά του μέσα για την αφαίρεση κειμένου με βάση τη θέση ή την αντιστοίχιση. Για να μάθετε πώς να επιτελείτε το έργο με εγγενείς τύπους, ανατρέξτε στην ενότητα Πώς να αφαιρέσετε κείμενο πριν ή μετά από έναν χαρακτήρα στο Excel.

    Regex για να αφαιρέσετε τα πάντα εκτός από

    Για να εξαλείψετε όλους τους χαρακτήρες από μια συμβολοσειρά εκτός από αυτούς που θέλετε να κρατήσετε, χρησιμοποιήστε κλάσεις χαρακτήρων με άρνηση.

    Για παράδειγμα, για να αφαιρέσετε όλους τους χαρακτήρες εκτός από τα πεζά γράμματα και τις τελείες, η regex είναι:

    Μοτίβο : [^a-z\.]+

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

    =RegExpReplace(A5, "[^a-z\.]+", "")

    Regex για την αφαίρεση ετικετών html στο Excel

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

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

    Αρνητική τάξη:

    Μοτίβο : ]*>,

    Εδώ, αντιστοιχίζουμε μια εναρκτήρια γωνιακή παρένθεση, ακολουθούμενη από μηδέν ή περισσότερες εμφανίσεις οποιουδήποτε χαρακτήρα εκτός από την τελική γωνιακή παρένθεση [^>]* μέχρι την πλησιέστερη τελική γωνιακή παρένθεση.

    Τεμπέλικη αναζήτηση:

    Μοτίβο :

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

    Όποιο σχέδιο και αν επιλέξετε, το αποτέλεσμα θα είναι απολύτως το ίδιο.

    Για παράδειγμα, για να αφαιρέσετε όλες τις ετικέτες html από μια συμβολοσειρά στο Α5 και να αφήσετε το κείμενο, ο τύπος είναι:

    =RegExpReplace(A5, "]*>", "")

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

    Αυτή η λύση λειτουργεί τέλεια για ένα κείμενο (γραμμές 5 - 9). Για πολλαπλά κείμενα (γραμμές 10 - 12), τα αποτελέσματα είναι αμφισβητήσιμα - τα κείμενα από διαφορετικές ετικέτες συγχωνεύονται σε ένα. Είναι αυτό σωστό ή όχι; Φοβάμαι ότι δεν είναι κάτι που μπορεί να αποφασιστεί εύκολα - όλα εξαρτώνται από την κατανόηση του επιθυμητού αποτελέσματος. Για παράδειγμα, στο Β11, αναμένεται το αποτέλεσμα "Α1", ενώ στο Β10, μπορεί να θέλετεΤα "data1" και "data2" πρέπει να διαχωρίζονται με κενό.

    Για να αφαιρέσετε τις ετικέτες html και να διαχωρίσετε τα υπόλοιπα κείμενα με κενά, μπορείτε να προχωρήσετε με αυτόν τον τρόπο:

    1. Αντικαταστήστε τις ετικέτες με κενά " ", όχι κενές συμβολοσειρές:

      =RegExpReplace(A5, "]*>", " ")

    2. Μειώστε πολλαπλά κενά σε έναν μόνο χαρακτήρα κενού:

      =RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")

    3. Κόψτε τα κενά που προηγούνται και ακολουθούν:

      =TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))

    Το αποτέλεσμα θα μοιάζει κάπως έτσι:

    Εργαλείο αφαίρεσης Regex Ablebits

    Εάν είχατε την ευκαιρία να χρησιμοποιήσετε την Ultimate Suite για το Excel, πιθανώς να έχετε ήδη ανακαλύψει τα νέα εργαλεία Regex που εισήχθησαν με την πρόσφατη έκδοση. Η ομορφιά αυτών των βασισμένων στο .NET συναρτήσεων Regex είναι ότι, πρώτον, υποστηρίζουν πλήρως εξοπλισμένη σύνταξη κανονικών εκφράσεων χωρίς τους περιορισμούς της VBA RegExp και, δεύτερον, δεν απαιτούν την εισαγωγή οποιουδήποτε κώδικα VBA στα βιβλία εργασίας σας, καθώς όλη η ενσωμάτωση του κώδικα γίνεταιαπό εμάς στο backend.

    Το δικό σας μέρος της εργασίας είναι να κατασκευάσετε μια κανονική έκφραση και να την παραδώσετε στη συνάρτηση :) Επιτρέψτε μου να σας δείξω πώς να το κάνετε αυτό σε ένα πρακτικό παράδειγμα.

    Πώς να αφαιρέσετε κείμενο σε αγκύλες και παρενθέσεις χρησιμοποιώντας regex

    Σε μεγάλες σειρές κειμένου, οι λιγότερο σημαντικές πληροφορίες συχνά περικλείονται σε [αγκύλες] και (παρενθέσεις). Πώς μπορείτε να αφαιρέσετε αυτές τις άσχετες λεπτομέρειες διατηρώντας όλα τα υπόλοιπα δεδομένα;

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

    Μοτίβο : (\(.*?\))

    Το τέχνασμα είναι η χρήση ενός τεμπέλικου ποσοδείκτη (*;) για να ταιριάξει με τη συντομότερη δυνατή υποσειρά. Η πρώτη ομάδα (\(.*?\)) ταιριάζει με οτιδήποτε από μια εναρκτήρια παρένθεση μέχρι την πρώτη κλειστή παρένθεση. Η δεύτερη ομάδα (\[.*?\]) ταιριάζει με οτιδήποτε από μια εναρκτήρια παρένθεση μέχρι την πρώτη κλειστή παρένθεση. Μια κάθετη γραμμή

    Με το μοτίβο καθορισμένο, ας το "τροφοδοτήσουμε" στη συνάρτηση Regex Remove:

    1. Στο Δεδομένα Ablebits στην καρτέλα Κείμενο ομάδα, κάντε κλικ στο Εργαλεία Regex .

  • Στο Εργαλεία Regex παράθυρο, επιλέξτε τις αρχικές συμβολοσειρές σας, πληκτρολογήστε την regex σας, επιλέξτε το Αφαιρέστε το και πατήστε το πλήκτρο Αφαιρέστε το .

    Για να λάβετε τα αποτελέσματα ως τύπους και όχι ως τιμές, επιλέξτε την επιλογή Εισαγωγή ως τύπος πλαίσιο ελέγχου.

    Για να αφαιρέσουμε το κείμενο μέσα σε αγκύλες από τις συμβολοσειρές A2:A5, διαμορφώνουμε τις ρυθμίσεις ως εξής:

  • Ως αποτέλεσμα, η AblebitsRegexRemove εισάγεται σε μια νέα στήλη δίπλα στα αρχικά σας δεδομένα.

    Η συνάρτηση μπορεί επίσης να εισαχθεί απευθείας σε ένα κελί μέσω της τυπικής εντολής Λειτουργία εισαγωγής παράθυρο διαλόγου, όπου κατηγοριοποιείται στην κατηγορία AblebitsUDFs .

    Όπως AblebitsRegexRemove έχει σχεδιαστεί για την αφαίρεση κειμένου, απαιτεί μόνο δύο ορίσματα - τη συμβολοσειρά προέλευσης και το regex. Και οι δύο παράμετροι μπορούν να οριστούν απευθείας σε έναν τύπο ή να παρέχονται με τη μορφή αναφορών κελιών. Εάν χρειάζεται, αυτή η προσαρμοσμένη συνάρτηση μπορεί να χρησιμοποιηθεί μαζί με οποιεσδήποτε εγγενείς.

    Για παράδειγμα, για να κόψετε τα επιπλέον κενά στις συμβολοσειρές που προκύπτουν, μπορείτε να χρησιμοποιήσετε τη συνάρτηση TRIM ως περιτύλιγμα:

    =TRIM(AblebitsRegexRemove(A5, $A$2))

    Αυτός είναι ο τρόπος αφαίρεσης συμβολοσειρών στο Excel χρησιμοποιώντας κανονικές εκφράσεις. Σας ευχαριστώ για την ανάγνωση και ανυπομονώ να σας δω στο blog μας την επόμενη εβδομάδα!

    Διαθέσιμες λήψεις

    Αφαίρεση συμβολοσειρών με χρήση regex - παραδείγματα (.xlsm αρχείο)

    Ultimate Suite - δοκιμαστική έκδοση (.exe αρχείο)

    Ο Michael Brown είναι ένας αφοσιωμένος λάτρης της τεχνολογίας με πάθος για την απλοποίηση πολύπλοκων διαδικασιών χρησιμοποιώντας εργαλεία λογισμικού. Με περισσότερο από μια δεκαετία εμπειρίας στον κλάδο της τεχνολογίας, έχει βελτιώσει τις δεξιότητές του στο Microsoft Excel και το Outlook, καθώς και στα Φύλλα Google και στα Έγγραφα. Το blog του Michael είναι αφιερωμένο στο να μοιράζεται τη γνώση και την τεχνογνωσία του με άλλους, παρέχοντας εύκολες συμβουλές και σεμινάρια για τη βελτίωση της παραγωγικότητας και της αποτελεσματικότητας. Είτε είστε έμπειρος επαγγελματίας είτε αρχάριος, το ιστολόγιο του Michael προσφέρει πολύτιμες πληροφορίες και πρακτικές συμβουλές για να αξιοποιήσετε στο έπακρο αυτά τα βασικά εργαλεία λογισμικού.