es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

vbscript: RegExp Replace convertir grupo de captura en variable

regex en VBscript tiene 3 métodos, Test, Extract y Replace, pero solo puedo convertir los grupos de captura de Extract en una variable.
Sin embargo, lo que quiero hacer es usar los grupos de captura de ‘Replace’ como una variable. Puedo hacer que Regex.Replace funcione sin problemas utilizando $1 $2, etc. para los grupos de captura, pero quiero multiplicar uno de los grupos de captura.

En un archivo xml, quiero extraer un valor, multiplicarlo por 15 e insertarlo nuevamente. En este ejemplo, es la etiqueta .

por ejemplo:

strText = "
  <rte>
    <name>gpx.studio church 2 reduced.gpx</name>
    <rtept lat='-33.482652' lon='150.159134'>
      <ele>938.4</ele>
      <desc>076</desc>
    </rtept>
    <rtept lat='-33.4825698175265' lon='150.159515440464'>
      <ele>942.3</ele>
      <desc>162</desc>
    </rtept>
    <rtept lat='-33.4828785376496' lon='150.159633457661'>
      <ele>943.4</ele>
      <desc>098</desc>
    </rtept>
  </rte>
"
Dim oRegExp
Set oRegExp = New RegExp
oRegExp.Global=True
oRegExp.Multiline = True
oRegExp.Pattern = strPattern
strPattern = "<><em>?))<desc>(.</desc></em>?)</desc>((?:(?:.|\n|\r)*?))"

strReplace = "$1<desc>$2</desc>$3"

En esta línea de código anterior, quiero convertir $2 en un entero y multiplicarlo por 15 antes de volver a ponerlo en Replace.
No lo he hecho aquí porque sé que no funciona como “$2” x1000

strNewText = oRegExp.Replace(strText, strReplace)

Quiero convertir $2 en un entero y multiplicarlo por 15 antes de volver a ponerlo en Replace.

He intentado obtener los grupos de captura como SubMatches(1), lo cual funciona con el método Regex.Extract, pero no parece funcionar en el método Regex.Replace, a menos que me esté perdiendo algo….

Se agradece la ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para usar un grupo de captura de una función Replace como una variable en VBScript, puedes modificar la expresión de reemplazo para incluir código VBScript utilizando una función.

    Por ejemplo, puedes usar la función Replace con un parámetro de función para reemplazar la etiqueta <desc> por su valor capturado multiplicado por 15:

    ' Define la función para multiplicar el valor capturado por 15
    Function MultiplyBy15(match, capture1, capture2, capture3)
        Dim intValue
        intValue = CInt(capture2) * 15 ' Convierte el grupo de captura a entero y multiplica por 15
        MultiplyBy15 = capture1 & "<desc>" & intValue & "</desc>" & capture3 ' Devuelve la cadena modificada
    End Function
    
    ' Utiliza la función en el método Replace
    strNewText = oRegExp.Replace(strText, GetRef("MultiplyBy15"))
    

    En este ejemplo, la función MultiplyBy15 toma cuatro parámetros: la cadena completa coincidente y los tres grupos de captura capture1, capture2 y capture3. La función convierte capture2 en un entero, lo multiplica por 15 y devuelve la cadena modificada con la etiqueta <desc> reemplazada.

    La función GetRef() se utiliza para pasar una referencia a la función MultiplyBy15 al método Replace, ya que VBScript no admite pasar funciones como parámetros directamente.

Comments are closed.