Sintaxis REGEXP para sustituir una palabra x otra

Iniciado por condotiero, 19 Marzo 2015, 11:01 AM

0 Miembros y 1 Visitante están viendo este tema.

condotiero

Buenos días.

Estoy trabajando con fuentes de noticias RSS en un programa de gestión de contenidos (digital signage). El programa permite parsear y filtrar los ítems y urls de varias maneras (también a través de expresiones regulares), pero soy neófito en el tema y no sé qué sintaxis debo poner para poder reemplazar una palabra x otra utilizando una expresión regular.

Muchas gracias por anticipado.

engel lex

primero necesitas una función replace y su sisntaxis, ya que pueden trabajar de formas diferentes, pero normalmente los grupos de captura los retornan como $1, $2... así hasta el $9

Regex es un poco acido y complicado al inicio, pero eventualmente se vuelve super util...

necesitas saber las características de lo buscado y del resultado, si indicas eso puedo ayudarte
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eleкtro

#2
Te pongo un breve ejemplo:

Tienes esta cadena de texto:
Hola, Mundo!

Tienes esta expresión regular:
"(.+)(\,)(\s+)(.+)(\!)"

Cada pareja de paréntesis representa un grupo, cada grupo es una especie de delimitador de captura, y a la expresión debes añadirle otra pareja de paréntesis imaginaria de esta manera: "((.+)(\,)(\s+)(.+)(\!))" que representa el primer grupo de todos (es decir la captura completa), por ende:

Grupo 0: "Hola, Mundo!"
Grupo 1: "Hola"
Grupo 2: ","
Grupo 3: " "
Grupo 4: "Mundo"
Grupo 5: "!"

Conociendo lo que hemos capturado, los grupos de los que consta la captura, el índice de los grupos, y dando por hecho que se utilice el símbolo "$" para interpretar un grupo, entonces solo debemos inercambiar los grupos en el orden deseado, por ejemplo, la unión de los grupos "$4$2$3$1$5" o también "Mundo, $1!" darían cómo resultado:
Mundo, Hola!




El programa o lenguaje que estés utilizando debe tener funcionalidades de reemplazado (o replace) cómo te ha comentado el compañero Engel Lex.

Cabe mencionar que existen diferencias de sintaxis del motor Regex puede dependiendo del lenguaje en el que se utilice, por ejemplo te puedes encontrar que los grupos se representan con un símbolo/sintaxis diferente en otro lenguaje de scripting,
además de eso, en lenguajes orientados a objetos, el manejo de los grupos se suele hacer mediante el uso de miembros (classes y propiedades), en lugar de interpretar símbolos cómo "$0".

Lee las documentación de la Wikipedia, que muy pocas fuentes superan esta información:
Regular expression - Wikipedia, the free encyclopedia

Por último, te muestro un ejemplo en VB.Net (en C# sería lo mismo):

Código (vbnet) [Seleccionar]
Imports System.Text.RegularExpressions

Public NotInheritable Class Form1

   Dim input As String = "Hola, Mundo!"
   Dim format As String
   Dim replace As String

   Dim regEx As New Regex("(.+)(\,)(\s+)(.+)(\!)", RegexOptions.IgnoreCase)

   Private Sub Test() Handles MyBase.Shown

       Dim matches As MatchCollection = regEx.Matches(input)
       Dim value1 As String = matches(0).Groups(1).Value ' "Hola"
       Dim value2 As String = matches(0).Groups(2).Value ' ","
       Dim value3 As String = matches(0).Groups(3).Value ' " "
       Dim value4 As String = matches(0).Groups(4).Value ' "Mundo"
       Dim value5 As String = matches(0).Groups(5).Value ' "!"

       format = String.Format("{0}{1}{2}{3}{4}",
                              value4, value2, value3, value1, value5)

       replace = input.Replace(value1, value4).
                       Replace(value3 & value4, value3 & value1)

       Debug.Print(format)
       Debug.Print(replace)

   End Sub

End Class


Saludos