in

Cómo usar expresiones regulares (Regex) en Microsoft Excel tanto en la celda como en bucles

apple touch icon@2

Expresiones regulares se utilizan para la coincidencia de patrones.

Para usar en Excel, siga estos pasos:

Paso 1: Agregue una referencia de VBA a «Microsoft VBScript Regular Expressions 5.5»

  • Seleccione la pestaña «Desarrollador» (No tengo esta pestaña, ¿qué hago?)
  • Seleccione el icono «Visual Basic» de la sección de cinta «Código»
  • En la ventana «Microsoft Visual Basic para Aplicaciones», seleccione «Herramientas» en el menú superior.
  • Seleccione «Referencias»
  • Marque la casilla junto a «Expresiones regulares de Microsoft VBScript 5.5» para incluirla en su libro de trabajo.
  • Haga clic en Aceptar»

Paso 2: Defina su patrón

Definiciones basicas:

- Distancia.

  • P.ej a-z coincide con letras minúsculas de la a a la z
  • P.ej 0-5 coincide con cualquier número del 0 al 5

[] Coincide exactamente con uno de los objetos dentro de estos corchetes.

  • P.ej [a] coincide con la letra a
  • P.ej [abc] coincide con una sola letra que puede ser a, bo c
  • P.ej [a-z] coincide con cualquier letra minúscula del alfabeto.

() Agrupa diferentes partidos para fines de devolución. Vea los ejemplos a continuación.

{} Multiplicador para copias repetidas del patrón definido antes.

  • P.ej [a]{2} coincide con dos letras minúsculas consecutivas a: aa
  • P.ej [a]{1,3} coincide con al menos una y hasta tres letras minúsculas a, aa, aaa

+ Haga coincidir al menos uno o más de los patrones definidos antes.

  • P.ej a+ coincidirá con las a consecutivas a, aa, aaa, etcétera

? Coincide con cero o uno de los patrones definidos antes.

  • Por ejemplo, el patrón puede estar presente o no, pero solo se puede hacer coincidir una vez.
  • P.ej [a-z]? coincide con una cadena vacía o cualquier letra minúscula.

* Coincide con cero o más del patrón definido antes.

  • Por ejemplo, comodín para un patrón que puede estar presente o no.
  • P.ej [a-z]* coincide con una cadena vacía o una cadena de letras minúsculas.

. Coincide con cualquier carácter excepto nueva línea n

  • P.ej a. Coincide con una cadena de dos caracteres que comienza con a y termina con cualquier cosa excepto n

| Operador OR

  • P.ej a|b significa ya sea a o b se puede combinar.
  • P.ej red|white|orange coincide exactamente con uno de los colores.

^ NO operador

  • P.ej [^0-9] el carácter no puede contener un número
  • P.ej [^aA] el personaje no puede ser en minúsculas a o mayúscula A

Escapa del carácter especial que sigue (anula el comportamiento anterior)

  • P.ej ., \, (, ?, $, ^

Patrones de anclaje:

^ La coincidencia debe ocurrir al comienzo de la cadena

  • P.ej ^a El primer carácter debe ser una letra minúscula a
  • P.ej ^[0-9] El primer carácter debe ser un número.

$ La coincidencia debe ocurrir al final de la cadena

  • P.ej a$ El último carácter debe ser una letra minúscula a

Tabla de precedencia:

Order  Name                Representation
1      Parentheses         ( )
2      Multipliers         ? + * {m,n} {m, n}?
3      Sequence & Anchors  abc ^ $
4      Alternation         |

Abreviaturas de caracteres predefinidas:

abr    same as       meaning
d     [0-9]         Any single digit
D     [^0-9]        Any single character that's not a digit
w     [a-zA-Z0-9_]  Any word character
W     [^a-zA-Z0-9_] Any non-word character
s     [ rtnf]   Any space character
S     [^ rtnf]  Any non-space character
n     [n]          New line

Ejemplo 1: Ejecutar como macro

La siguiente macro de ejemplo mira el valor en la celda A1 para ver si los primeros 1 o 2 caracteres son dígitos. Si es así, se eliminan y se muestra el resto de la cadena. De lo contrario, aparecerá un cuadro que le indicará que no se ha encontrado ninguna coincidencia. Celda A1 valores de 12abc volverá abc, valor de 1abc volverá abc, valor de abc123 devolverá «No coincide» porque los dígitos no estaban al principio de la cadena.

Private Sub simpleRegex()
    Dim strPattern As String: strPattern = "^[0-9]{1,2}"
    Dim strReplace As String: strReplace = ""
    Dim regEx As New RegExp
    Dim strInput As String
    Dim Myrange As Range
    
    Set Myrange = ActiveSheet.Range("A1")
    
    If strPattern <> "" Then
        strInput = Myrange.Value
        
        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With
        
        If regEx.Test(strInput) Then
            MsgBox (regEx.Replace(strInput, strReplace))
        Else
            MsgBox ("Not matched")
        End If
    End If
End Sub

Ejemplo 2: Ejecutar como una función en la celda

Este ejemplo es el mismo que el ejemplo 1, pero está configurado para ejecutarse como una función dentro de la celda. Para usar, cambie el código a esto:

Function simpleCellRegex(Myrange As Range) As String
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String
    
    
    strPattern = "^[0-9]{1,3}"
    
    If strPattern <> "" Then
        strInput = Myrange.Value
        strReplace = ""
        
        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With
        
        If regEx.test(strInput) Then
            simpleCellRegex = regEx.Replace(strInput, strReplace)
        Else
            simpleCellRegex = "Not matched"
        End If
    End If
End Function

Coloque sus cadenas («12abc») en la celda A1. Ingrese esta fórmula =simpleCellRegex(A1) en la celda B1 y el resultado será «abc».

imagen de resultados


Ejemplo 3: Bucle a través del rango

Este ejemplo es el mismo que el ejemplo 1, pero recorre un rango de celdas.

Private Sub simpleRegex()
    Dim strPattern As String: strPattern = "^[0-9]{1,2}"
    Dim strReplace As String: strReplace = ""
    Dim regEx As New RegExp
    Dim strInput As String
    Dim Myrange As Range
    
    Set Myrange = ActiveSheet.Range("A1:A5")
    
    For Each cell In Myrange
        If strPattern <> "" Then
            strInput = cell.Value
            
            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With
            
            If regEx.Test(strInput) Then
                MsgBox (regEx.Replace(strInput, strReplace))
            Else
                MsgBox ("Not matched")
            End If
        End If
    Next
End Sub

Ejemplo 4: Separando diferentes patrones

Este ejemplo recorre un rango (A1, A2 Y A3) y busca una cadena que comience con tres dígitos seguidos de un solo carácter alfabético y luego 4 dígitos numéricos. La salida divide las coincidencias del patrón en celdas adyacentes mediante el uso de (). $1 representa el primer patrón emparejado dentro del primer conjunto de ().

Private Sub splitUpRegexPattern()
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim Myrange As Range
    
    Set Myrange = ActiveSheet.Range("A1:A3")
    
    For Each C In Myrange
        strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
        
        If strPattern <> "" Then
            strInput = C.Value
            
            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With
            
            If regEx.test(strInput) Then
                C.Offset(0, 1) = regEx.Replace(strInput, "$1")
                C.Offset(0, 2) = regEx.Replace(strInput, "$2")
                C.Offset(0, 3) = regEx.Replace(strInput, "$3")
            Else
                C.Offset(0, 1) = "(Not matched)"
            End If
        End If
    Next
End Sub

Resultados:

imagen de resultados


Ejemplos de patrones adicionales

String   Regex Pattern                  Explanation
a1aaa    [a-zA-Z][0-9][a-zA-Z]{3}       Single alpha, single digit, three alpha characters
a1aaa    [a-zA-Z]?[0-9][a-zA-Z]{3}      May or may not have preceding alpha character
a1aaa    [a-zA-Z][0-9][a-zA-Z]{0,3}     Single alpha, single digit, 0 to 3 alpha characters
a1aaa    [a-zA-Z][0-9][a-zA-Z]*         Single alpha, single digit, followed by any number of alpha characters

</i8>    </[a-zA-Z][0-9]>            Exact non-word character except any single alpha followed by any single digit

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Función de biblioteca C – realloc ()

gfg 200x200 min

Cola de montón (o heapq) en Python