Regex para eliminar certos caracteres ou texto en Excel

  • Comparte Isto
Michael Brown
omítese o argumento, elimínanse todas as coincidencias atopadas. Para eliminar unha coincidencia específica, defina o número de instancia.

Nas seguintes cadeas, supoña que quere eliminar o primeiro número de orde. Todos estes números comezan co signo hash (#) e conteñen exactamente 5 díxitos. Polo tanto, podemos identificalos usando esta expresión regular:

Patrón : #\d{5}\b

O límite da palabra \b especifica que unha subcadea coincidente non se pode parte dunha cadea máis grande, como #10000001.

Para eliminar todas as coincidencias, o argumento número_instancia non está definido:

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

Para erradicar só a primeira aparición, establecemos o argumento número_instancia en 1:

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

Regex para eliminar certos caracteres

Para eliminar certos caracteres dunha cadea, só tes que anotar todos os caracteres non desexados e separalos cunha barra verticalsintaxis sen limitacións de VBA RegExp e, en segundo lugar, non require inserir ningún código VBA nos seus libros de traballo xa que toda a integración do código a realizamos no backend.

A súa parte do traballo é construír unha expresión regular e sirvao á función :) Permíteme mostrarche como facelo nun exemplo práctico.

Como eliminar texto entre corchetes e parénteses usando regex

En cadeas de texto longas, información menos importante adóitase encerrar entre [corchetes] e (parénteses). Como eliminas eses detalles irrelevantes conservando todos os demais datos?

De feito, xa creamos unha expresión regular similar para eliminar etiquetas html, é dicir, texto entre corchetes angulares. Obviamente, os mesmos métodos tamén funcionarán para corchetes e corchetes.

Patrón : (\(.*?\))

Algunha vez pensaches no poderoso que sería Excel se alguén puidese enriquecer a súa caixa de ferramentas con expresións regulares? Non só pensamos, senón que traballamos niso :) E agora podes engadir esta marabillosa función RegEx aos teus propios libros de traballo e eliminar as subcadeas que coincidan cun patrón en pouco tempo!

A semana pasada, miramos sobre como usar expresións regulares para substituír cadeas en Excel. Para iso, creamos unha función personalizada de substitución de regex. Como se viu, a función vai máis aló do seu uso principal e non só pode substituír cadeas, senón tamén eliminalas. Como podería ser iso? En termos de Excel, eliminar un valor non é outra cousa que substituílo por unha cadea baleira, algo no que a nosa función Regex é moi boa!

Función VBA RegExp para eliminar subcadeas en Excel

Como todos sabemos, as expresións regulares non son compatibles en Excel por defecto. Para activalos, cómpre crear a súa propia función definida polo usuario. A boa noticia é que esa función xa está escrita, probada e lista para o seu uso. Todo o que tes que facer é copiar este código, pegalo no teu editor de VBA e despois gardar o teu ficheiro como caderno de traballo habilitado para macros (.xlsm).

A función ten o seguinte sintaxe:

RegExpReplace(texto, patrón, substitución, [número_instancia], [match_case])

Os tres primeiros argumentos son obrigatorios, os dous últimos son opcionais.

Onde:

  • Texto - a cadea de texto para buscarposible ata que atope un corchete de peche.

Calquera patrón que elixas, o resultado será absolutamente o mesmo.

Por exemplo, para eliminar todas as etiquetas html dunha cadea en A5 e deixar texto, a fórmula é:

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

Ou pode usar o cuantificador preguiceiro como se mostra na captura de pantalla:

Esta solución funciona perfectamente para texto único (filas 5 - 9). Para varios textos (filas 10 - 12), os resultados son cuestionables: os textos de diferentes etiquetas únense nunha soa. Isto é correcto ou non? Témome que non é algo que se poida decidir facilmente: todo depende da túa comprensión do resultado desexado. Por exemplo, en B11, espérase o resultado "A1"; mentres que en B10, pode querer que "data1" e "data2" se separen cun espazo.

Para eliminar as etiquetas html e separar os textos restantes con espazos, pode proceder deste xeito:

  1. Substituír as etiquetas con espazos " ", non cadeas baleiras:

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

  2. Reducir varios espazos a un único carácter de espazo:

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

  3. Recorta os espazos iniciais e finais:

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

O resultado terá un aspecto similar ao seguinte:

Ferramenta de eliminación de regex de Ablebits

Se tiveches a oportunidade de usar a nosa Ultimate Suite para Excel, probablemente xa descubriches as novas ferramentas Regex introducidas coa recente versión. A beleza destas funcións Regex baseadas en .NET é que, en primeiro lugar, admiten expresións regulares con todas as funciónsa opción Eliminar e prema Eliminar .

Para obter os resultados como fórmulas, non como valores, seleccione a caixa de verificación Inserir como fórmula .

Para eliminar texto entre corchetes das cadeas en A2:A5, configuramos a configuración do seguinte xeito:

Como resultado, a función AblebitsRegexRemove insírese nunha nova columna xunto aos datos orixinais.

A función tamén se pode introducir directamente nunha cela a través do cadro de diálogo estándar Inserir función , onde se clasifica en AblebitsUDFs .

Como AblebitsRegexRemove está deseñado para eliminar texto, só require dous argumentos: a cadea de orixe e a expresión regular. Ambos parámetros pódense definir directamente nunha fórmula ou proporcionarse en forma de referencias de cela. Se é necesario, esta función personalizada pódese usar xunto con calquera nativa.

Por exemplo, para recortar espazos adicionais nas cadeas resultantes, podes utilizar a función TRIM como envoltorio:

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

Así é como eliminar cadeas en Excel usando expresións regulares. Grazas por ler e espero verte no noso blog a vindeira semana!

Descargas dispoñibles

Elimina cadeas usando expresións rex. - exemplos (ficheiro .xlsm)

Ultimate Suite - versión de proba (ficheiro .exe)

in.
  • Patrón : a expresión regular que se quere buscar.
  • Substitución : o texto co que se quere substituír. Para eliminar subcadeas que coincidan co patrón, use unha cadea baleira ("") para substituír.
  • Instance_num (opcional) - a instancia para substituír. Se se omite, substitúense todas as coincidencias atopadas (predeterminada).
  • Match_case (opcional): un valor booleano que indica se se debe facer coincidir ou ignorar maiúsculas e minúsculas. Para a correspondencia que distingue entre maiúsculas e minúsculas, use TRUE (predeterminado); para non distinguir entre maiúsculas e minúsculas: FALSO.
  • Para obter máis información, consulte a función RegExpReplace.

    Consello. En casos sinxelos, pode eliminar caracteres ou palabras específicos das celas con fórmulas de Excel. Pero as expresións regulares ofrecen moitas máis opcións para iso.

    Como eliminar cadeas usando expresións regulares - exemplos

    Como se mencionou anteriormente, para eliminar partes de texto que coincidan cun patrón, debes substituílas. cunha cadea baleira. Así, unha fórmula xenérica toma esta forma:

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

    Os exemplos seguintes mostran varias implementacións deste concepto básico.

    Eliminar todas as coincidencias ou coincidencias específicas

    A función RegExpReplace está deseñada para atopar todas as subcadeas que coincidan cunha expresión regular determinada. As ocorrencias que se deben eliminar están controladas polo 4º argumento opcional, chamado número_instancia .

    O valor predeterminado é "todos coinciden", cando número_instancia operador de concatenación (&) e funcións de texto, como RIGHT, MID e LEFT.

    Por exemplo, para escribir todos os números de teléfono no formato (123) 456-7890, a fórmula é:

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

    Onde B5 é a saída da función RegExpReplace.

    Elimina os caracteres especiais usando regex

    Nun dos nosos titoriais, analizamos como eliminar caracteres non desexados en Excel usando funcións integradas e personalizadas. As expresións regulares facilitan moito as cousas! En lugar de enumerar todos os caracteres para eliminar, simplemente especifique os que quere manter :)

    O patrón baséase en clases de caracteres negados : ponse un cursor dentro dunha clase de caracteres [^ ] para que coincida con calquera carácter NON entre corchetes. O cuantificador + obrígao a considerar os caracteres consecutivos como unha única coincidencia, polo que se fai unha substitución por unha subcadea coincidente en lugar de por cada carácter individual.

    En función das túas necesidades, escolla unha das seguintes regex.

    Para eliminar os caracteres non alfanuméricos , é dicir, todos os caracteres excepto as letras e os díxitos:

    Patrón : [^0-9a-zA-Z] +

    Para limpar todos os caracteres excepto letras , díxitos e espazos :

    Patrón : [^0-9a-zA-Z ]+

    Para eliminar todos os caracteres excepto as letras , díxitos e subliñado , podes usar \ W que significa calquera carácter que NON sexa un carácter alfanumérico ouguión baixo:

    Patrón : \W+

    Se queres conter outros caracteres , p.ex. signos de puntuación, colócaos entre corchetes.

    Por exemplo, para eliminar calquera carácter que non sexa unha letra, un díxito, un punto, unha coma ou un espazo, use a seguinte expresión regular:

    Patrón : [^0-9a-zA-Z\., ]+

    Isto elimina correctamente todos os caracteres especiais, pero queda espazo en branco adicional.

    Para solucionar isto, podes aniñar a función anterior noutra que substitúa varios espazos cun único espazo.

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

    Ou simplemente use a función TRIM nativa co mesmo efecto. :

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

    Regex para eliminar caracteres non numéricos

    Para eliminar todos os caracteres non numéricos dunha cadea, pode usar esta fórmula longa ou unha das expresións regulares moi sinxelas que se indican a continuación.

    Coincide con calquera carácter que NON sexa un díxito:

    Patrón : \D+

    Elimina os caracteres non numéricos usando clases negadas:

    Patrón : [^0-9]+

    Patrón : [^\d] +

    Consello. Se o seu obxectivo é eliminar texto e verter os números restantes en celas separadas ou colocalos todos nunha cela separada cun delimitador especificado, entón use a función RegExpExtract como se explica en Como extraer números dunha cadea usando expresións regulares.

    Regex para eliminar todo despois do espazo

    Para borrar todo despois dun espazo, usa o espazo ( ) ouespazo en branco (\s) para atopar o primeiro espazo e .* para facer coincidir calquera carácter despois del.

    Se tes cadeas dunha soa liña que só conteñen espazos normais (valor 32 no sistema ASCII de 7 bits) , realmente non importa cal das seguintes regex uses. No caso de cadeas de varias liñas, fai a diferenza.

    Para eliminar todo despois dun carácter de espazo , utiliza esta expresión regular:

    Patrón : " .*"

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

    Esta fórmula eliminará calquera cousa despois do primeiro espazo en cada liña . Para que os resultados se mostren correctamente, asegúrate de activar Envolver texto.

    Para eliminar todo despois dun espazo en branco (incluíndo un espazo, tabulación, retorno de carro e nova liña), a expresión regular é:

    Patrón : \s.*

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

    Porque \s coincide con algúns tipos de espazos en branco diferentes, incluíndo unha nova liña (\n), esta fórmula borra todo despois do primeiro espazo nunha cela, sen importar cantas liñas haxa nela.

    Regex para eliminar texto despois de determinadas carácter

    Utilizando os métodos do exemplo anterior, pode eliminar o texto despois de calquera carácter que especifique.

    Para xestionar cada liña por separado:

    Patrón xenérico : char.*

    En cadeas dunha soa liña, isto eliminará todo despois de char . Nas cadeas de varias liñas, cada liña procesarase individualmente porque no estilo VBA Regex, un punto (.) coincide con calquera carácter excepto un novoinicio dunha cadea ^, coincidimos con cero ou máis caracteres que non sexan espazos [^ ]* que van inmediatamente seguidos por un ou máis espazos " +". A última parte engádese para evitar posibles espazos principais nos resultados.

    Para eliminar o texto antes do primeiro espazo en cada liña, a fórmula escríbese no modo predeterminado "todas as coincidencias" ( número_instance omitido):

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

    Para eliminar texto antes do primeiro espazo na primeira liña e deixar todas as outras liñas intactas, o argumento número_instancia establécese en 1:

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

    Regex para quitar todo antes do carácter

    A forma máis sinxela de eliminar todo o texto antes dun carácter específico é usando unha expresión regular así:

    Patrón xenérico : ^[^char]*char

    Traducido a unha linguaxe humana, di: "desde o inicio dunha cadea ancorada por ^ , coincida con 0 ou máis caracteres excepto char [^char]* ata a primeira aparición de char .

    Por exemplo, para eliminar todo o texto antes dos primeiros dous puntos , use esta expresión regular:

    Patrón : ^[^:]*:

    Para evitar espazos principais nos resultados, engade un carácter de espazo en branco \s* ao fin. Isto eliminará todo g antes dos primeiros dous puntos e recorta os espazos inmediatamente despois:

    Patrón : ^[^:]*:\s*

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

    Consello. Ademais das expresións regulares, Excel ten os seus propios medios para eliminar texto por posición ou coincidencia. Para aprender a realizar a tarefa con fórmulas nativas,consulte Como eliminar texto antes ou despois dun carácter en Excel.

    Regex para eliminar todo excepto

    Para eliminar todos os caracteres dunha cadea excepto os que quere manter, use clases de caracteres negados.

    Por exemplo, para eliminar todos os caracteres excepto as letras minúsculas. e puntos, a expresión regular é:

    Patrón : [^a-z\.]+

    De feito, poderiamos prescindir do cuantificador + aquí xa que a nosa función substitúe todo atopou coincidencias. O cuantificador só o fai un pouco máis rápido: en lugar de manexar cada carácter individual, substitúe unha subcadea.

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

    Regex para eliminar as etiquetas html en Excel

    En primeiro lugar, hai que ter en conta que HTML non é unha linguaxe regular, polo que analizalo usando expresións regulares non é a mellor forma. Dito isto, as expresións regulares poden axudar a eliminar as etiquetas das túas celas para que o teu conxunto de datos sexa máis limpo.

    Dado que as etiquetas html sempre se colocan entre corchetes angulares , podes atopalas usando unha das seguintes expresións regulares.

    Clase negada:

    Patrón : ]*>

    Aquí coincidimos cun corchete angular de apertura, seguido de cero ou máis aparicións de calquera carácter excepto o corchete de ángulo de peche [^>]* ata o corchete de ángulo de peche máis próximo.

    Busca perezosa:

    Patrón :

    Aquí coincidimos desde o primeiro soporte de apertura ata o primeiro soporte de peche. O signo de interrogación obriga a que .* coincida con tan poucos caracteres comoliña.

    Para procesar todas as liñas como unha única cadea:

    Patrón xenérico : char(.

    Michael Brown é un entusiasta da tecnoloxía dedicada á súa paixón por simplificar procesos complexos mediante ferramentas de software. Con máis dunha década de experiencia na industria tecnolóxica, perfeccionou as súas habilidades en Microsoft Excel e Outlook, así como en Follas de cálculo e Documentos de Google. O blog de Michael está dedicado a compartir o seu coñecemento e experiencia con outros, proporcionando consellos e titoriais fáciles de seguir para mellorar a produtividade e a eficiencia. Tanto se es un profesional experimentado como un principiante, o blog de Michael ofrece valiosas ideas e consellos prácticos para sacar o máximo proveito destas ferramentas de software esenciais.