Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Expresion Regular. Cuestión
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Expresion Regular. Cuestión 
 
Hola!.

Hace un tiempo estuve hablando de las expresiones regulares. Con Python me defiendo un poco dentro de lo posible,
pero me gustaría tambien poder hacer lo mismo en gambas. Y es que encuentro diferencias que no llego a comprender.

Os muestro un ejemplo en Python y busco una respuesta de como hacerlo en gambas. Sera sencillo.
Se como hacerlo en gambas, pero busco otra forma más sencilla. Y no sé si es un característica propia
de cada lenguaje, del componente. Ni idea.

Os muestro el código y os digo la salida que:
En Python se importa el modulo re, para poder usar expresiones regulares:

import re

palabras = []
frase = "La aventura espacial"

palabras = re.findall('.+?\s',frase)
print palabras
 


Bien, en este caso, palabras es una lista(array) y en Python te muestra la lista completa:
Obtendríamos:

Citar:

['La ', 'aventura ']


Hay un espacio despues de la palabra debido a la expresión regular.
Si queremos evitar ese espacio, debemos usar los paréntesis.

...
palabras = re.findall('(.+?)\s',frase)
....
 


Y así obtendríamos:

Citar:

['La', 'aventura']


Si quiero  hacerlo en gambas, yo intentaría hacerlo con la misma expresión.
En gambas tengo que añadir un símbolo de  barra mas.

Public Sub Main()
  
  Dim frase As String
  Dim re As New RegExp  
  Dim i As Integer
  
  frase = "La aventura espacial"
  re.Compile("(.+?)\\s")
  re.Exec(frase)
  For i = 1 To re.Count
    Print re[i].Text
  Next
  
End
 


Esto me da:

Citar:

La


Bien, pero yo quiero La aventura. El procedimiento que se hacer en gambas es repetir la expresión. ( Que es lo que no quiero hacer).
Y hacer uso de los paréntesis.

Quiero dejar una nota para que sepáis que ahora hay algo que ha quedado anticuado:
Citar:

.Eval.?.0: gb.pcre: Regexp.Submatches is deprecated. Do not use it anymore


Hago el código y añado dos veces la expresión.
Public Sub Main()
  
  Dim frase As String
  Dim re As New RegExp  
  Dim i As Integer
  
  frase = "La aventura espacial"
  re.Compile("(.+?)\\s(.+?)\\s")
  re.Exec(frase)
  For i = 1 To re.Count
    Print re[i].Text
  Next
  
End
 


Y duplicando la expresión y haciendo uso de los paréntesis dos veces, capturo la parte que me interesa. Cada palabra coincidente con su índice.
En gambas no estoy seguro si se puede hacer de la primera forma. Es que es repetirse mucho. Y la expresión resultante puede ser enorme y más confusa de lo que son ya.

No vale que uséis Split. Jejeje. La cosa es usar expresiones regulares.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 10 Marzo 2015, 14:41; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Expresion Regular. Cuestión 
 
Pos ni idea si se puede. Siendo lo potentes que son, las expresiones regulares me resultan muy antipáticas desde siempre aunque, supongo, que estamos condenados a ellas...
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Expresion Regular. Cuestión 
 
Shordi:

gambas tiene constantes como equivalentes a esos símbolos. ( A saber como sera jugar con eso..)
Es preferible algo más estándar. Si así de esta forma vale para distintos lenguajes.

Es cuestión de acostumbrarse y practicarlo. Resulta casi Chino con tanto signos.
Lógicamente "la chuleta" hay que usarla.

La página que un día puso Jesús es muy interesante para practicar las expresiones regulares.

RegExr: Aprende, Construye y Testea RegEx

Pero no me resuelve la duda de como se debe hacer en gambas. Si es obligatorio repetir expresión.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Expresion Regular. Cuestión 
 
Encontré lo que puede ser una solución. Es del 2008.

Gambas User. Regular Expressions

Es una implementación de la función FindAll. Solamente la he traducido, la solución es de: Rob

Public Function FindAll(tema As String, patron As String) As String[]

  Dim re As RegExp
  Dim coincidencias As New String[]
  
  re = New RegExp(tema, patron)
  Do While re.Offset >= 0 And tema <> ""
    coincidencias.Add(re.Text)
    If Len(tema) > Len(re.Text) Then
      tema = Mid(tema, re.Offset + Len(re.Text) + 1)
    Else
      tema = ""
    Endif
    If tema <> "" Then re.Exec(tema)
  Loop
  Return coincidencias  

End
 


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Error "Bad Character Constant In Stri... destroyer General 2 Domingo, 06 Marzo 2011, 09:15 Ver último mensaje
destroyer
No hay nuevos mensajes Expresion Complicada alessandri General 6 Martes, 07 Agosto 2012, 04:21 Ver último mensaje
Edward
No hay nuevos mensajes Una Cuestión De POO shordi General 2 Miercoles, 28 May 2014, 19:46 Ver último mensaje
shordi
No hay nuevos mensajes ¿Como Regular El Alto De Un ListBox Segun... v3ctor General 8 Viernes, 29 Septiembre 2017, 19:11 Ver último mensaje
v3ctor
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron