Optimizar expresiones regulares

Esta sección es para preguntas sobre programación/scripting usando AutoHotkey.

Moderator: Flipeador

alfema
Posts: 32
Joined: 04 Sep 2015, 11:04

Optimizar expresiones regulares

24 Nov 2018, 12:37

Hola

Hacia tiempo que no escribía por aquí, todavía no manejo bien las expresiones regulares y creo que se puede mejorar lo que hice, tengo el texto de abajo quiero extraer los bloques 1 (SNR) 2 (Velocidad) y 3 (Atenuación) para lo que uso el código comentado, pero creo que se puede optimizar en un par de ellos o en uno solo pero que no acierto a conseguir.

Code: Select all

^1::

Global vResCAD
vResCAD := {}

vSincroCSC      := clipboard
vSincroCSCCorto := ""
wCRLF           := "`r`n"

; Busca sincronismo

If (BuscaCadenaAlt(vSincroCSC, "SNR(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)") <> "-1")
	vSincroCSCCorto .= vResCAD[0] . wCRLF . wCRLF
	
If (BuscaCadenaAlt(vSincroCSC, "Velocidad(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)") <> "-1")
	vSincroCSCCorto .= vResCAD[0] . wCRLF . wCRLF

If (BuscaCadenaAlt(vSincroCSC, "Atenuación(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)" . wCRLF) <> "-1")
	vSincroCSCCorto .= vResCAD[0] . wCRLF


MsgBox % vSincroCSCCorto

Return

; Buca una cadena de texto (RegExMatch), ...
;   devuelve -1 si no la localiza.
;   vResCad[n], n de 1 a 9 devuelve la cadena específica según la posición de búsqueda
;   en el elemento 0 devuelve la cadena buscada completa.
;

BuscaCadenaAlt(wDondeBucar, wQueBuscar)
{
	vPos := RegExMatch(wDondeBucar, wQueBuscar, SubPat)
	If (vPos = 0)
		Return "-1"

	vResCad[0] := Trim(SubPat)
	vResCad[1] := Trim(SubPat1)
	vResCad[2] := Trim(SubPat2)
	vResCad[3] := Trim(SubPat3)
	vResCad[4] := Trim(SubPat4)
	vResCad[5] := Trim(SubPat5)
	vResCad[6] := Trim(SubPat6)
	vResCad[7] := Trim(SubPat7)
	vResCad[8] := Trim(SubPat8)
	vResCad[9] := Trim(SubPat9)

	Return vResCad
}
Estabilidad del servicio RISKY

SNR [dB]
Downstream Value 9.4 dB
Upstream Value 9.9 dB

Velocidad de sincronismo actual [kb/s]
Downstream Value 544.0 kb/s
Upstream Value 823.0 kb/s

Velocidad máxima alcanzable [kb/s]
Downstream Value 732.0 kb/s
Upstream Value 816.0 kb/s

Atenuación [dB]
Downstream Value 44.4 dB
Upstream Value 35.4 dB

Potencia [dBm]
alfema
Posts: 32
Joined: 04 Sep 2015, 11:04

Re: Optimizar expresiones regulares

24 Nov 2018, 14:52

Insistiendo y haciendo pruebas con un simulador de expresiones regulares he conseguido reducir un poco la expresión, una vez conseguida ha sido fácil juntar las dos primeras búsquedas, solo me queda conseguir el resultado con una sola expresión.

Antes para los dos primero:

Code: Select all

"SNR(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)"
"Velocidad(.+)" . wCRLF . "(.+)" . wCRLF . "(.+)"
Después:

Code: Select all

"SNR((.+)`r`n){3}`r`n((.+)`r`n){3}"

Return to “Pedir Ayuda”

Who is online

Users browsing this forum: No registered users and 16 guests