Página 1 de 1

Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 10 Jun 2013, 18:47
por dacu
Nadie dijo que fuese fácil las expresiones regulares, Pero una cosa que pensé que era sencilla a mi me esta costando todo el día.

Ya he leído los post donde se hablar de las expresiones regulares del foro y no consigo dar con al solución.

Caso practico:

Grupo1|grupo2|grupo3|grupo4

Explicación de lo que quiero hacer.

$String='19|salud|58|29|economia'

Cambia("GRUPO3","POR ESTO")

Esto daria como resultado

$String='19|salud|POR ESTO|29|economia'

Es decir. Poder cambiar Grupos mediante un delimitador que en este caso es "|" pero sin saber que datos habrá en cada grupo.

Cada grupo tendrá datos diferentes los cuales no se pueden saber. Es decir. Esto no sirve.

Código: Seleccionar todo

StringRegExpReplace("Grupo1|grupo2|grupo3|grupo4", "Grupo1|(.*?)|grupo3|grupo4", " GrupoNuevo")
Si no que lo que tengo que conseguir es decir. Quiero cambiar el Grupo3 y como referencia solo puedo tener el Delimitador que en este caso es " | " pero podría ser cualquier otro. En cada Grupo tenemos Números y casi cualquier tipo de carácter.

He intentado cosas:

Código: Seleccionar todo

$sMsg3=StringRegExpReplace("uno dos tres", "(\S){4}", "cuatro")
Pero no paso de hay. Tengo que poder cambiar cada grupo a elección. Grupo 1 , 2 ,3 ....

Espero que me podáis ayudar como siempre. Gracias.

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 10 Jun 2013, 19:03
por Dany
Podrías mostrar mas código a que estas aplicando eso. porque no queda claro lo que quieres hacer... :smt020

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 10 Jun 2013, 20:32
por dacu
Dany escribió:Podrías mostrar mas código a que estas aplicando eso. porque no queda claro lo que quieres hacer... :smt020
Ok. Pensé que me explique bien. Volveré a editar el post con mas datos.

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 10 Jun 2013, 22:09
por Dany
¿algo así es lo que quieres pero con expresiones regulares?

Código: Seleccionar todo


$string='Grupo1|grupo2|grupo3|grupo4'



msgbox(0,"",remplazar($string,"Seria algo asi",4))

Func remplazar($cadena,$cambio, $sn)
	local $split=Stringsplit($cadena,"|")
	local $r=''
	local $i=0
	$split[$sn]=$cambio
	for $i=1 to $split[0]
		$r&=$split[$i]&'|'
		next
	return Stringleft($r,stringlen($r)-1)
EndFunc
así evitas usar expresiones regulares.


EDITO



Si quieres con Expresiones Regulares podría ser algo así.

Código: Seleccionar todo

$string='Grupo1|grupo2|grupo3|grupo4'

msgbox(0,"",StringRegExpReplace($string,'[^|]*'& 3 ,'Daniel'))

Saludos :smt027

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 10 Jun 2013, 23:43
por dacu
Valla. Muchas Gracias. La función me funciona perfectamente, La expresión regular no tanto, con el string que hay en el ejemplo todo bien pero cuando cambio ya no se comporta igual. Pero la función eta super bien. Muchas gracias por ayudar. Partes la cadena y luego la reconstruyes cambiando el dato. Lo había pensado pero no lo hubiese echo en tan pocas lineas. Muchas gracias.

Dany escribió:...........

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 12 Jun 2013, 00:18
por Chefito
Mmmmmm....muy buena función Dany.
Supongo que haya buenas soluciones con expresiones regulares, lo que pasa que el caso que nos presentas es algo peleagudo, por lo menos para mí. Yo no se mucho de expresiones regulares, ya que pueden llegar a ser bastantes complicadas. Voy a dar una solución, que lejos de ser lo mejor, creo que puede valer para este caso:

Código: Seleccionar todo

$texto="grupo1|grupo2|grupo3|grupo4"
$sustitucion="Lo cambio por esto"
$solucion=StringRegExpReplace($texto, "(\|.*?\|)(.*?)(\|.*?)", "$1" & $sustitucion & "$3")
MsgBox(0,"",$solucion)
Saludos.

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Publicado: 12 Jun 2013, 05:26
por Dany
Chefito escribió:Mmmmmm....muy buena función Dany.
Supongo que haya buenas soluciones con expresiones regulares, lo que pasa que el caso que nos presentas es algo peleagudo, por lo menos para mí. Yo no se mucho de expresiones regulares, ya que pueden llegar a ser bastantes complicadas. Voy a dar una solución, que lejos de ser lo mejor, creo que puede valer para este caso:

Código: Seleccionar todo

$texto="grupo1|grupo2|grupo3|grupo4"
$sustitucion="Lo cambio por esto"
$solucion=StringRegExpReplace($texto, "(\|.*?\|)(.*?)(\|.*?)", "$1" & $sustitucion & "$3")
MsgBox(0,"",$solucion)
Saludos.

yo se que las RegExp se te dan muy bien. :P yo soy pesimo jajaja.

a ver si creamos un tema de retos para que así nos creamos nuestras funciones y aprendemos todos juntos.

saludos compa. :smt027