Reemplazar Solo 1 Grupo con StringRegExpReplace

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje 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.
Última edición por dacu el 10 Jun 2013, 20:36, editado 2 veces en total.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje por Dany »

Podrías mostrar mas código a que estas aplicando eso. porque no queda claro lo que quieres hacer... :smt020
  • ............................................Imagen
    ......................................Imagen
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje 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.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje 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
  • ............................................Imagen
    ......................................Imagen
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje 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ó:...........
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje 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.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Reemplazar Solo 1 Grupo con StringRegExpReplace

Mensaje 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
  • ............................................Imagen
    ......................................Imagen
Responder