Regex para correo electrónico

Expresiones regex (Expresión regular) son algo muy práctico para encontrar un texto con un determinado patrón dentro de otro texto. Sin embargo, si necesitas una expresión regex para encontrar una dirección de correo electrónico en un texto, las cosas se complican rápidamente donde no tienen por qué. En mi búsqueda en Internet, me encontré con muchísimos ejemplos de patrones regex y largas discusiones en foros sobre las distintas expresiones regex para encontrar una dirección de correo. Lamentablemente, en mi caso, muy pocos de ellos conducían a una coincidencia donde debería haberla, así que acabé creando mi propio patrón.

En mi caso concreto, quería componer un correo de respuesta automática utilizando una macro VBA y, en el caso de los correos reenviados, el remitente original de un correo debía determinarse a partir del texto del correo y, a continuación, el correo original debía marcarse como leído y moverse a otra carpeta.

Expresión regular para determinar la dirección de correo electrónico

Para obtener la dirección de correo electrónico, he utilizado el siguiente código VBA. Por supuesto, el código regex también se puede utilizar en cualquier otro lenguaje de programación, como C#. En caso necesario, sólo hay que tener en cuenta algunas particularidades del lenguaje de programación correspondiente.

   Dim myRegex As Object
    Dim resultados Como Objeto
    Dim match As Objeto

    Set myRegex = Nuevo RegExp
    myRegex.pattern = "[\w.-]*@[\w.-]*\.[\w]{2,6}"
    myRegex.Global = Verdadero
    Set results = myRegex.Execute(body)

    For Each match In results
        Debug.Print match.Value
        If match.Value = "searched@mail.de" Then
            'haz algo aquí.
            Salir para
        Fin If
    Siguiente

Así que la expresión regular real consiste en:

[\w.-]*@[\w.-]*\.[\w]{2,6}

Para la explicación:

Puedes ver claramente el signo @. Delante de él está la expresión [\w.-]*. \w significa cualquier letra, guión bajo y cualquier dígito de 0-9. También se ha añadido un punto “.” y un guión. El asterisco “*” tras los corchetes indica que los caracteres mencionados pueden aparecer en cualquier número. A continuación aparece el signo @ y de nuevo la misma expresión, que ahora representa el nombre de dominio. Por tanto, el nombre de dominio también puede estar formado por cualquier letra, número y también subdominios, separados por un punto.
A éste le sigue el punto que delimita el Top Level Domain (TLD), por ejemplo .de, .us, .com, .fr, .es. Dado que el punto en sí tiene un significado en la regex, representa casi cualquier carácter, el punto debe escribirse con barra invertida “\.”.
Y a continuación sigue la expresión real para el dominio de nivel superior [\w]{2,6}. Esto establece que el dominio de nivel superior puede estar formado por cualquier carácter (letras, dígitos, guión bajo) y puede tener un mínimo de 2 caracteres y un máximo de 6 caracteres. Sin duda, esto puede precisarse un poco más, ya que no conozco ningún TLD que contenga dígitos y, por otro lado, ya existen TLD con más de 6 caracteres, como .example o .hamburg. En la mayoría de los casos, sin embargo, la expresión anterior hace un buen trabajo.

Así que esto capturará todas las direcciones de correo, tales como.

  • erwin@ekiwi-blog.de
  • erwin.mueller@ekiwi.de
  • pergamont@berlin.museum
  • funny_ow.1.outreach@gma1il.ffg.com

No están cubiertos los correos con caracteres especiales o TLD muy largos. Si los hay, puede ajustar la expresión regex en consecuencia añadiendo los caracteres especiales o ajustando el número máximo de caracteres del TLD.

  • jonny.doe+marry-ann@gmail.com
  • John.O’Connor@gmail.ie
  • “Daniel\ O’Miller”@googlemail.com
  • aDominioIP@[1.2.3.4]

 

Leave a Reply

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