Taula de continguts
A les cadenes següents, suposem que voleu suprimir el primer número de comanda. Tots aquests números comencen amb el signe hash (#) i contenen exactament 5 dígits. Per tant, podem identificar-los mitjançant aquesta expressió regular:
Patró : #\d{5}\b
El límit de la paraula \b especifica que una subcadena coincident no es pot part d'una cadena més gran, com ara #10000001.
Per eliminar totes les coincidències, l'argument número_instància no està definit:
=RegExpReplace(A5, "#\d{5}\b", "")
Per eradicar només la primera ocurrència, establim l'argument núm_instància a 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Execució regular per eliminar determinats caràcters
Per eliminar determinats caràcters d'una cadena, només cal que anoteu tots els caràcters no desitjats i separeu-los amb una barra verticalsintaxi lliure de limitacions de VBA RegExp i, en segon lloc, no cal inserir cap codi VBA als vostres llibres de treball, ja que tota la integració de codi la fem nosaltres al fons.
La vostra part del treball és construir una expressió regular i serveix-ho a la funció :) Permeteu-me que us mostri com fer-ho amb un exemple pràctic.
Com eliminar el text entre claudàtors i parèntesis utilitzant regex
En cadenes de text llargues, informació menys important sovint s'inclou entre [parèntesis] i (parèntesis). Com elimineu aquests detalls irrellevants conservant totes les altres dades?
De fet, ja hem creat una expressió regular similar per suprimir etiquetes HTML, és a dir, text entre claudàtors angulars. Òbviament, els mateixos mètodes també funcionaran per als claudàtors quadrats i rodons.
Patró : (\(.*?\))
Has pensat mai com de poderós seria Excel si algú pogués enriquir la seva caixa d'eines amb expressions regulars? No només hem pensat, sinó que hi hem treballat :) I ara, podeu afegir aquesta meravellosa funció RegEx als vostres propis llibres de treball i eliminar les subcadenes que coincideixen amb un patró en molt poc temps!
La setmana passada, vam mirar a com utilitzar expressions regulars per substituir cadenes a Excel. Per a això, hem creat una funció personalitzada de substitució de regex. Com va resultar, la funció va més enllà del seu ús principal i no només pot substituir les cadenes, sinó també eliminar-les. Com podria ser això? En termes d'Excel, eliminar un valor no és altra cosa que substituir-lo per una cadena buida, una cosa en la qual la nostra funció Regex és molt bona!
Funció VBA RegExp per eliminar subcadenes a Excel
Com tots sabem, les expressions regulars no s'admeten a Excel per defecte. Per activar-los, heu de crear la vostra pròpia funció definida per l'usuari. La bona notícia és que aquesta funció ja està escrita, provada i llesta per al seu ús. Tot el que heu de fer és copiar aquest codi, enganxar-lo al vostre editor de VBA i, a continuació, desar el fitxer com a llibre de treball habilitat per a macro (.xlsm).
La funció té el sintaxi següent:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Els tres primers arguments són obligatoris, els dos últims són opcionals.
On:
- Text : la cadena de text a cercarpossible fins que trobi un claudàtor de tancament.
Sigui quin sigui el patró que trieu, el resultat serà absolutament el mateix.
Per exemple, per eliminar totes les etiquetes HTML d'una cadena en A5 i deixar text, la fórmula és:
=RegExpReplace(A5, "]*>", "")
O podeu utilitzar el quantificador mandros tal com es mostra a la captura de pantalla:
Aquesta solució funciona perfectament per a text únic (files 5 - 9). Per a diversos textos (files 10 a 12), els resultats són qüestionables: els textos de diferents etiquetes es fusionen en una sola. Això és correcte o no? Em temo que no és una cosa que es pugui decidir fàcilment; tot depèn de la vostra comprensió del resultat desitjat. Per exemple, a B11, s'espera el resultat "A1"; mentre que a B10, potser voldreu que "data1" i "data2" estiguin separats amb un espai.
Per eliminar les etiquetes HTML i separar els textos restants amb espais, podeu procedir d'aquesta manera:
- Substituïu les etiquetes amb espais " ", no cadenes buides:
=RegExpReplace(A5, "]*>", " ")
- Reduïu diversos espais a un únic caràcter d'espai:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Retalla els espais inicials i finals:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
El resultat semblarà a aquest:
Eina d'eliminació de regex d'Ablebits
Si heu tingut l'oportunitat d'utilitzar la nostra Ultimate Suite per a Excel, probablement ja heu descobert les noves eines Regex introduïdes amb el llançament recent. La bellesa d'aquestes funcions Regex basades en .NET és que, en primer lloc, admeten expressions regulars amb totes les funcionsl'opció Elimina i premeu Elimina .
Per obtenir els resultats com a fórmules, no com a valors, marqueu la casella de selecció Insereix com a fórmula .
Per eliminar el text entre claudàtors de les cadenes a A2:A5, configurem la configuració de la següent manera:
Com a resultat, la funció AblebitsRegexRemove s'insereix en una nova columna al costat de les dades originals.
La funció també es pot introduir directament en una cel·la mitjançant el quadre de diàleg estàndard Insereix funció , on es classifica a AblebitsUDFs .
Com que AblebitsRegexRemove està dissenyat per eliminar text, només requereix dos arguments: la cadena d'origen i l'expressió regular. Tots dos paràmetres es poden definir directament en una fórmula o subministrar-se en forma de referències de cel·la. Si cal, aquesta funció personalitzada es pot utilitzar juntament amb qualsevol de les natives.
Per exemple, per retallar espais addicionals a les cadenes resultants, podeu utilitzar la funció TRIM com a embolcall:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Així és com eliminar cadenes a Excel mitjançant expressions regulars. Us agraeixo la lectura i espero veure-us al nostre bloc la setmana vinent!
Descàrregues disponibles
Elimineu les cadenes amb expresions regulars - exemples (fitxer .xlsm)
Ultimate Suite - versió de prova (fitxer .exe)
in.Per obtenir més informació, vegeu la funció RegExpReplace.
Consell. En casos senzills, podeu eliminar caràcters o paraules específics de les cel·les amb fórmules d'Excel. Però les expressions regulars ofereixen moltes més opcions per a això.
Com eliminar cadenes mitjançant expressions regulars - exemples
Com s'ha esmentat anteriorment, per eliminar parts de text que coincideixin amb un patró, les heu de substituir amb una cadena buida. Per tant, una fórmula genèrica pren aquesta forma:
RegExpReplace(text, pattern, "", [instance_num], [match_case])Els exemples següents mostren diverses implementacions d'aquest concepte bàsic.
Eliminar totes les coincidències o coincidències específiques
La funció RegExpReplace està dissenyada per trobar totes les subcadenes que coincideixen amb una expressió regular determinada. Quines ocurrències s'eliminen estan controlades pel quart argument opcional, anomenat número_instància .
El valor per defecte és "tots coincideixen", quan número_instància operador de concatenació (&) i funcions de text com ara DRET, MITJANA i ESQUERRA.
Per exemple, per escriure tots els números de telèfon en el format (123) 456-7890, la fórmula és:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
On B5 és la sortida de la funció RegExpReplace.
Elimineu els caràcters especials amb regex
En un dels nostres tutorials, vam mirar com eliminar caràcters no desitjats a Excel mitjançant funcions integrades i personalitzades. Les expressions regulars faciliten molt les coses! En lloc d'enumerar tots els caràcters que cal suprimir, només cal que especifiqueu els que voleu conservar :)
El patró es basa en classes de caràcters negats : es posa un accent dins d'una classe de caràcters [^ ] perquè coincideixi amb qualsevol caràcter que NO entre parèntesis. El quantificador + l'obliga a considerar els caràcters consecutius com una única concordança, de manera que es substitueix una subcadena coincident en lloc de cada caràcter individual.
Depenent de les vostres necessitats, trieu una de les execucions regulars següents.
Per eliminar caràcters no alfanumèrics , és a dir, tots els caràcters excepte lletres i dígits:
Patró : [^0-9a-zA-Z] +
Per eliminar tots els caràcters excepte les lletres , dígits i espais :
Patró : [^0-9a-zA-Z ]+
Per suprimir tots els caràcters excepte les lletres , dígits i subratllat , podeu utilitzar \ W que representa qualsevol caràcter que NO sigui un caràcter alfanumèric oGuió baix:
Patró : \W+
Si voleu conservar alguns altres caràcters , p. signes de puntuació, poseu-los entre claudàtors.
Per exemple, per eliminar qualsevol caràcter que no sigui una lletra, un dígit, un punt, una coma o un espai, utilitzeu l'expressió regular següent:
Patró : [^0-9a-zA-Z\., ]+
Això elimina correctament tots els caràcters especials, però queden espais en blanc addicionals.
Per solucionar-ho, podeu niar la funció anterior en una altra que substitueixi diversos espais amb un sol caràcter d'espai.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
O simplement utilitzeu la funció TRIM nativa amb el mateix efecte. :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex per eliminar caràcters no numèrics
Per eliminar tots els caràcters no numèrics d'una cadena, podeu utilitzar ja sigui aquesta fórmula llarga o una de les expressions regulars molt senzilles que es mostren a continuació.
Coincideix amb qualsevol caràcter que NO sigui un dígit:
Patró : \D+
Elimina els caràcters no numèrics mitjançant classes negates:
Patró : [^0-9]+
Patró : [^\d] +
Consell. Si el vostre objectiu és eliminar el text i vessar els números restants en cel·les separades o col·locar-los tots en una cel·la separada amb un delimitador especificat, feu servir la funció RegExpExtract tal com s'explica a Com extreure números d'una cadena mitjançant expressions regulars.
Regex per eliminar tot el que hi ha després d'un espai
Per esborrar tot el que hi ha després d'un espai, utilitzeu l'espai ( ) ocaràcter d'espai en blanc (\s) per trobar el primer espai i .* per fer coincidir els caràcters posteriors.
Si teniu cadenes d'una sola línia que només contenen espais normals (valor 32 al sistema ASCII de 7 bits) , realment no importa quina de les execucions regulars següents feu servir. En el cas de cadenes de diverses línies, sí que marca la diferència.
Per eliminar tot després d'un caràcter d'espai , utilitzeu aquesta expressió regular:
Patró : ".*"
=RegExpReplace(A5, " .*", "")
Aquesta fórmula eliminarà qualsevol cosa després del primer espai de cada línia . Perquè els resultats es mostrin correctament, assegureu-vos d'activar l'ajust de text.
Per eliminar tot després d'un espai en blanc (inclosos un espai, una tabulació, un retorn de carro i una línia nova), l'expressió regular és:
Patró : \s.*
=RegExpReplace(A5, "\s.*", "")
Perquè \s coincideix amb uns quants tipus d'espais en blanc diferents, inclosa una línia nova (\n), aquesta fórmula elimina tot el que hi ha després del primer espai d'una cel·la, sense importar quantes línies hi hagi. caràcter
Usant els mètodes de l'exemple anterior, podeu eradicar el text després de qualsevol caràcter que especifiqueu.
Per gestionar cada línia per separat:
Patró genèric : char.*
En les cadenes d'una sola línia, això eliminarà tot el que hi ha després de char . A les cadenes de diverses línies, cada línia es processarà individualment perquè en el sabor Regex de VBA, un punt (.) coincideix amb qualsevol caràcter excepte un noucomençament d'una cadena ^, fem coincidir zero o més caràcters que no són espais [^ ]* que són seguits immediatament per un o més espais " +". L'última part s'afegeix per evitar possibles espais inicials als resultats.
Per eliminar el text abans del primer espai de cada línia, la fórmula s'escriu en el mode "totes les coincidències" per defecte ( núm_instància omès):
=RegExpReplace(A5, "^[^ ]* +", "")
Per suprimir el text abans del primer espai de la primera línia i deixar intactes totes les altres línies, l'argument núm_instància s'estableix en 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex per eliminar tot el que hi ha abans del caràcter
La manera més senzilla d'eliminar tot el text abans d'un caràcter específic és mitjançant una expressió regular així:
Patró genèric : ^[^char]*char
Traduït a un llenguatge humà, diu: "des de l'inici d'una cadena ancorada per ^ , coincideix amb 0 o més caràcters excepte char [^char]* fins a la primera ocurrència de char .
Per exemple, per suprimir tot el text abans dels primers dos punts , utilitzeu aquesta expressió regular:
Patró : ^[^:]*:
Per evitar espais inicials als resultats, afegiu un caràcter d'espai en blanc \s* al final. Això ho eliminarà tot g abans dels primers dos punts i retalla els espais just després d'ell:
Patró : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Consell. A més de les expressions regulars, Excel té els seus propis mitjans per eliminar text per posició o coincidència. Per aprendre a realitzar la tasca amb fórmules natives,si us plau, vegeu Com eliminar el text abans o després d'un caràcter a Excel.
Regex per eliminar-ho tot excepte
Per eliminar tots els caràcters d'una cadena excepte els que voleu conservar, utilitzeu classes de caràcters negats.
Per exemple, per eliminar tots els caràcters excepte les minúscules. i punts, l'expressió regular és:
Patró : [^a-z\.]+
De fet, podríem prescindir del quantificador + aquí ja que la nostra funció substitueix tots trobat coincidències. El quantificador només ho fa una mica més ràpid: en lloc de gestionar cada caràcter individual, substituïu una subcadena.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex per eliminar les etiquetes html a Excel
En primer lloc, cal tenir en compte que HTML no és un llenguatge normal, de manera que analitzar-lo mitjançant expressions regulars no és la millor manera. Dit això, les execucions regulars poden ajudar-vos a eliminar les etiquetes de les vostres cel·les per fer que el vostre conjunt de dades sigui més net.
Atès que les etiquetes html sempre es col·loquen entre claudàtors angulars , podeu trobar-les mitjançant una de les execucions regulars següents.
Classe negada:
Patró : ]*>
Aquí, fem coincidir un parèntesi angular d'obertura, seguit de zero o més ocurrències de qualsevol caràcter excepte el parèntesi angular de tancament [^>]* fins a l'angle de tancament més proper.
Cerca mandrosa:
Patró :
Aquí coincideixen qualsevol cosa, des del primer suport d'obertura fins al primer suport de tancament. El signe d'interrogació obliga a que .* coincideixi amb tants caràcters comlínia.
Per processar totes les línies com una cadena única:
Patró genèric : char(.