Imprimir página | Cerrar ventana

Objeto Expresiones Regulares en VBA

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Tus Funciones Favoritas & Aportaciones & Artí­culos
Descripción del foro: Para publicar código interesante, aportaciones y artículos
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84469
Fecha de impresión: 22/Septiembre/2020 a las 22:58


Tema: Objeto Expresiones Regulares en VBA
Publicado por: jilo
Asunto: Objeto Expresiones Regulares en VBA
Fecha de publicación: 27/Abril/2019 a las 18:15

        I.            El objeto RegExp para VBA

Las expresiones regulares son las grandes olvidadas, no se utilizan mucho, pero cuando te toca utilizarlas lamentas no conocerlas más. Casi toda la gente que conozco dice conocerlas “más o menos”, pero cuando le preguntas por un problema concreto no sabe resolverlo.

Permiten filtrar textos para encontrar coincidencias, comprobar la validez de fechas, documentos de identidad o contraseñas, se pueden utilizar para reemplazar texto con unas características concretas por otro, y muchos más usos.

El problema es que la creaccion de patrones, que es el corazon, no es intuitivo a primera vista, pero siempre hay gente generosa que cuelga sus progresos para que los usemos. Hay también, una página web que emula y se pueden hacer pruebas de patrones con diferentes textos (https://regexr.com/)

Sí se quiere activar la referencia,  en mi caso: ‘Microsoft VBScript Regular Expressions 5.5’

Como se declara el Objeto regExr:

Sí la referencia está activada:
  Dim objRE As New RegExp
Sino
    Dim ObjRE as Variant

   Set objRE = CreateObject("VBScript.RegExp")

 

 

Tres propiedades están disponibles para el objeto RegExp :

 

·         Global      Sí es TRUE , encuentra todas las coincidencias, si FALSE encuentra solo la primera coincidencia. Por defecto False

·         IgnoreCase      Sí TRUE  realiza una búsqueda sensible a mayúsculas y minúsculas

Por defecto False.

·         Pattern        el patrón RegExp para buscar

 

Tres métodos disponibles para el objeto RegExp :

 

·         Test     devuelve TRUE sí se encuentra una coincidencia en la cadena


·         Execute     devuelve un objeto con dos  propiedades:

1.       Count        el número de coincidencias encontradas en la cadena  (el máximo es 1 sí propiedad .Global = False )

2.       Item        Las coincidencias como objetos. Y esos objetos tienen estas 4 propiedades:

                                           I.             FirstIndex          la ubicación de la subcadena correspondiente en la  cadena

                                           II.            Longitud             la longitud de la subcadena correspondiente

                                           III.            Value                   el valor de la cadena de la coincidencia

                                           IV.            SubMatches       si se usaron paréntesis en el patrón: las partes coincidentes del patrón entre conjuntos de paréntesis devueltas como objetos, con 2 propiedades:

a)      Contar               El número de sub-partidas encontradas en el partido.

b)     Item                   El valor de la cadena de la sub-coincidencia


·         Replace             devuelve la cadena con los remplazos solicitados, con la primera coincidencia  (objRE.Global = False ) o todas las coincidencias (objRE .Global = True ) .



----------------

Un ejemplo vale mas que mil palabras


EJEMPLO

Vamos a suponer que hay que buscar en una cadena  los email's que encuentre ,tal que asi:

 

Cadena="A & M Consultores

Descripcion: Ofrecemos servicios para respaldar su gestión a todos los niveles e impulsarle para asumir retos presentes y futuros. A través del diagnóstico obtendrá una radiografía actual de su negocio para tomar decisiones de una forma más objetiva y consiguiendo así ahorrar tiempo y dinero.

Dirección: Urola 8  Cod Postal: 20230

Ciudad: Legazpia   Provincia: Guipúzcoa (Gipuzkoa)

Tel: 675 39 10 40   E-mail: consultores@amempresas.com

Web: www.amempresas.com

ABEGA PREVENCION

Descripcion: Elaboracion de planes de prevención

Dirección: Av. Eduardo Boscá, 14. Despacho 7  Cod Postal: 46023

Ciudad: Valencia   Provincia: Valencia

Tel: 963374162   E-mail: valencia@abega-prevencion.com

Web: www.abega-prevencion.com"

 

Procedimiento que devuelve las cadenas tipo email encontradas en esa cadena.


consultores@amempresas.com


valencia@abega-prevencion.com


'.....

 Call  DevuelveEmailesEnCadena (Cadena)

              '.....

Sub DevuelveEmailesEnCadena(cadena As String)

 On Error Resume Next

   Dim objRE As New RegExp

   Dim colMatches As MatchCollection, regMatch

   With objRE

      .Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"

      .Global = True

     .IgnoreCase =  True

   Set colMatches =.Execute(cadena)

   For Each regMatch In colMatches

     Debug.Print  regMatch.Value

   Next

 End With

 Set objRE = Nothing

End Sub



-------------
Espero te sirva !!!!!!
Iñaki



Imprimir página | Cerrar ventana