Foros del Web » Programando para Internet » ASP Clásico »

Problema con expresiones regulares

Estas en el tema de Problema con expresiones regulares en el foro de ASP Clásico en Foros del Web. Bueno, debo decir que efectivamente ya tengo rato tratando de sacarlo pero como que estoy ciclado :-p A ver, tengo que analizar una cadena y ...
  #1 (permalink)  
Antiguo 31/05/2007, 13:03
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Problema con expresiones regulares

Bueno, debo decir que efectivamente ya tengo rato tratando de sacarlo pero como que estoy ciclado :-p

A ver, tengo que analizar una cadena y en base a su contenido hacer updates o inserts, no he tenido problemas mas que con una condición, cuando encuentro cadenas numéricas de 8 posiciones seguidas por diagonales, los siguientes patrones bloques de dígitos separados por dichas diagonales se repetirán con .... , bah!, mejor con ejemplos

Tengo esta cadena:

bla bla bla 12345678, 87654321

Esto me da como resultado dos registros, eso esta fácil


Pero si tengo esta cadena:

bla bla bla 12345678, 87654379/80/81

Me debe dar 4 registros: 12345678, 87654379, 87654380 y 87654381

Así mismo, por ejemplo:

bla bla bla 12345678, 87654379/80/81, 12345674/5

Me tendría que dar los 4 anteriores más 12345674 y 12345675



No logro dar con la expresión regular que me sustituya, por ejemplo 87654379/80/81 en 87654379/87654380/87654381, para luego con un sencillísimo \d{8} recorrer la cadena e insertarlos.


Si pudieran ayudarme esta vez para sacarme de mi bloqueo mental , se los agradeceré
  #2 (permalink)  
Antiguo 31/05/2007, 13:11
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Problema con expresiones regulares

Yo haría una expresión para cada caso (solo numérico, numérico cuando encuentra "/")

Después puedes tratar cada caso separadamente....deja me peleo un rato con esto
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 31/05/2007, 13:39
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problema con expresiones regulares

Se esta cayendo del pedestal el Sensei
demoños!!!
se nos esta la guia...
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #4 (permalink)  
Antiguo 31/05/2007, 13:46
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Problema con expresiones regulares

Cita:
Iniciado por Shiryu_Libra Ver Mensaje
Se esta cayendo del pedestal el Sensei
demoños!!!
se nos esta la guia...


Que te pasa mi Shiryu, aún soy tu maestro de los 5 picos (sin albur ), jajaja, no, no es cierto, pues cual pedestal? fuera de UG no conozco ninguno

PD. Ya más o menos lo saque pero recorriendo la cadena y pues .... demonios!!, estoy aferrado a que me salga con expresiones, jejeje
  #5 (permalink)  
Antiguo 31/05/2007, 13:51
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Problema con expresiones regulares

Código:
(\\d{8},|\\d{8}[/\\d]*)
Esto hace match a cualquiera de las ocurrencias, básicamente detecta

8 dígitos seguidos de ","
8 dígitos seguidos de cualquier número de la secuencia "/" + cualquier cantidad de dígitos.

Hice la prueba rápida en .NET si te sirve la implementación te la pego aquí, hace un rato que no toco ASP menos con expresiones regulares así que no estoy muy seguro como se haría pero la lógica es que iteres todas las que hagan match y puedas hacer el tratamiento de cada una de estas.

Salud
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 31/05/2007, 14:05
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Re: Problema con expresiones regulares

Expresiones regulares
¿No te sirve de esta manera?

Código:
<%
dato = "12345678, 87654379/80/81, 12345674/5"
dato = replace(dato, " ", "")

arr_dato = split(dato, ",")

for i = 0 to ubound(arr_dato)
	arr_sub_dato = split(arr_dato(i), "/")
	for j = 0 to ubound(arr_sub_dato)
		if len(arr_sub_dato(j)) = 8 then
			final = final & arr_sub_dato(j) & ","
			tmp = arr_sub_dato(j)
		else
			final = final & left(tmp, 8 - len(arr_sub_dato(j))) & arr_sub_dato(j) & ","
		end if
	next
next

final = left(final, len(final)-1)
response.write final
%>
Saludos master!

EDIT: Cuando leí el mensaje hab+ía sólo una respuesta de u_g cuyo único contenido era el smilie ""... se nota que me demoré un poco en pensar y escribir esas líneas
  #7 (permalink)  
Antiguo 31/05/2007, 14:10
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Problema con expresiones regulares

Cita:
Iniciado por Al Zuwaga Ver Mensaje
EDIT: Cuando leí el mensaje hab+ía sólo una respuesta de u_g cuyo único contenido era el smilie ""... se nota que me demoré un poco en pensar y escribir esas líneas
Lo iba a dejar así, pero ya ves como es el tal Myakire sobre todo cuando trae unos alcoholes de más siempre
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 31/05/2007, 14:31
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Problema con expresiones regulares

Update:

http://support.microsoft.com/kb/818802

Código:
Function TestRegExp(myPattern, myString)
   'Create objects.
   Dim objRegExp
   Dim objMatch
   Dim colMatches
   Dim RetStr
   
   ' Create a regular expression object.
   Set objRegExp = New RegExp

   'Set the pattern by using the Pattern property.
   objRegExp.Pattern = myPattern

   ' Set Case Insensitivity.
   objRegExp.IgnoreCase = True

   'Set global applicability.
   objRegExp.Global = True

   'Test whether the String can be compared.
   If (objRegExp.Test(myString) = True) Then

   'Get the matches.
    Set colMatches = objRegExp.Execute(myString)   ' Execute search.

    For Each objMatch In colMatches   ' Iterate Matches collection.
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & objMatch.FirstIndex & ". Match Value is '"
      RetStr = RetStr & objMatch.Value & "'." & vbCrLf
    Next
   Else
    RetStr = "String Matching Failed"
   End If
   TestRegExp = RetStr
End Function

Response.Write(TestRegExp("([0-9]{8},|[0-9]{8}[/[0-9]*]*)", "12345678,12345678/1/2, 21234554/24/26/21"))
Salud
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 31/05/2007, 16:40
Avatar de CésarBalaguer  
Fecha de Ingreso: octubre-2006
Ubicación: en mi casa
Mensajes: 181
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Problema con expresiones regulares

Yo lo trabajarìa con arreglos, primero harìa un split para el primer grupo (separados por comas) y luego trabajarìa cada elemento del arreglo,

Principal = split(cadena, ",")
de ahi recorro principal y en cada un ohago un split al "/" dependiendo el length de los elementos (del segundo en adelante) cojo los x primeros carateres (longitud del 1ro menos longitud de los que voy recorriendo) y voy concatenando, ylos voy pasando a un arreglo principal donde ya almacenè todos aquellos que no entran en la segunda comparaciòn.

creo que expliquè medio en chino, pero espero que se haya entendido.
  #10 (permalink)  
Antiguo 31/05/2007, 16:58
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Problema con expresiones regulares

Cita:
Iniciado por CésarBalaguer Ver Mensaje
Yo lo trabajarìa con arreglos, primero harìa un split para el primer grupo (separados por comas) y luego trabajarìa cada elemento del arreglo,

Principal = split(cadena, ",")
de ahi recorro principal y en cada un ohago un split al "/" dependiendo el length de los elementos (del segundo en adelante) cojo los x primeros carateres (longitud del 1ro menos longitud de los que voy recorriendo) y voy concatenando, ylos voy pasando a un arreglo principal donde ya almacenè todos aquellos que no entran en la segunda comparaciòn.

creo que expliquè medio en chino, pero espero que se haya entendido.
Es como la solución que propuso AZ...

Cita:
Iniciado por Myakire Ver Mensaje
PD. Ya más o menos lo saque pero recorriendo la cadena y pues .... demonios!!, estoy aferrado a que me salga con expresiones, jejeje
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #11 (permalink)  
Antiguo 01/06/2007, 08:17
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Problema con expresiones regulares

Cita:
Iniciado por Al Zuwaga Ver Mensaje
Expresiones regulares
¿No te sirve de esta manera?
...
Efectivamente, si me hubiera servido, pero el detalle es que la entrada no es algo tan sencillo como un "12345678, 87654379/80/81, 12345674/5", de hecho es un campo de comentarios, y puede venir con diferentes redacciones, te explico:

Mira, en una hoja excel viene un listado con algunos cientos de registros que debo de insertar, por ejemplo viene el 12345678, pero en la columna de comentarios dice: "También se deben agregar a ese número de parte los 12345679/80/81, así como el 12345100, este nuevo número de parte sustituye al 87654321" , como puedes ver no es tan sencillo como hacer un split, hay que analizar la cadena casi token por token, por eso el usar las expresiones .

De hecho en ese ejemplo de comentario que he puesto, notarán que en el mismo campo hay registros que debo insertar y UNO que debo eliminar, así que ni con expresiones me libró de hacer el análisis

Cita:
Iniciado por El Pedestal de U_G
([0-9]{8},|[0-9]{8}[/[0-9]*]*)
Ese me sirvió bastante!!, que va con usted mi estimado U_G, muchas gracias

Se ve fácil, pero no la pude sacar sin parsear el texto, vaya que necesito practicar más las expresiones regulares!!

Thaks.

PD. Postearía al código, pero la verdad lo estoy haciendo en Delphi pero ya saben que las expresiones son estándar, jeje
  #12 (permalink)  
Antiguo 01/06/2007, 10:17
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Re: Problema con expresiones regulares

Me alegro que te haya servido my friend, las expresiones regulares son irregulares para el cerebro ja ja ja, 'amo a festejar pué!


Salud!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:57.