** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - Objeto Expresiones Regulares en VBA
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Objeto Expresiones Regulares en VBA

 Responder Responder
Autor
Mensaje
jilo Ver desplegable
Colaborador
Colaborador


Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 887
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita jilo Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Objeto Expresiones Regulares en VBA
    Enviado: 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



Editado por jilo - 06/Mayo/2019 a las 19:04
Espero te sirva !!!!!!
Iñaki
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable