Saludos cordiales, por favor, agradecería mucho si pudieran ayudarme con la siguiente situación.
En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90
Lo que buscaba era quedarme únicamente con el 31 del primer caso, o con el 5 del segundo caso o con el 90 del tercer caso. Aclarar que el 31, el 5 y el 90 son solo ejemplos, pués pueden ser números más grandes (es decir 670, o 1014, o 1897, etc) pero siempre siempre hay un caracter o símbolo raro o letra antes del número como en los ejemplos.
Ayuda con Clipboard Topic is solved
Moderator: Flipeador
Re: Ayuda con Clipboard
Hola: Sin lugar a dudas lo haría con RegEx. El inconveniente que veo es que la descripción del problema no es muy precisa, mientras que RegEx requiere criterios claros para hallar el texto deseado. Al fin y al cabo, una expresión regular describe patrones y esto es justamente lo que no está definido.
No obstante lo dicho, este código encuentra los tres grupos de números indicados, aunque podría fallar en otros casos:
La expresión regular se divide en dos partes: la primera, \W\K\d+, dice algo así como "selecciona uno o más dígitos precedido/s por un símbolo que no sea dígito o letra" —captura "31" y "90"—, mientras que la segunda, \d+(?=\s), selecciona uno o más dígitos seguido/s de un espacio.
Para finalizar, copia del cuadro de mensajes el número que necesites.
Saludos.
No obstante lo dicho, este código encuentra los tres grupos de números indicados, aunque podría fallar en otros casos:
Code: Select all
Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90"
while pos := RegExMatch(Clipboard, "\W\K\d+|\d+(?=\s)", m, pos ? pos + StrLen(m) : 1)
MsgBox, % m
Para finalizar, copia del cuadro de mensajes el número que necesites.
Saludos.
Re: Ayuda con Clipboard
Gracias por responder. Tiene razón podría fallar en otros casos, como este: 6c89. Yo solo estaría interesado en el 89.sofista wrote: ↑14 Jul 2022, 09:14Hola: Sin lugar a dudas lo haría con RegEx. El inconveniente que veo es que la descripción del problema no es muy precisa, mientras que RegEx requiere criterios claros para hallar el texto deseado. Al fin y al cabo, una expresión regular describe patrones y esto es justamente lo que no está definido.
No obstante lo dicho, este código encuentra los tres grupos de números indicados, aunque podría fallar en otros casos:
La expresión regular se divide en dos partes: la primera, \W\K\d+, dice algo así como "selecciona uno o más dígitos precedido/s por un símbolo que no sea dígito o letra" —captura "31" y "90"—, mientras que la segunda, \d+(?=\s), selecciona uno o más dígitos seguido/s de un espacio.Code: Select all
Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90" while pos := RegExMatch(Clipboard, "\W\K\d+|\d+(?=\s)", m, pos ? pos + StrLen(m) : 1) MsgBox, % m
Para finalizar, copia del cuadro de mensajes el número que necesites.
Saludos.
Re: Ayuda con Clipboard
Veo, pero tiene arreglo con esta otra expresión que captura los cuatro casos requeridos: selecciona uno o más dígitos precedidos por uno o más dígitos y uno o más caracteres que no sean dígitos.
Un dato relevante es establecer el o los caracteres que puede/n seguir al número a capturar o si éste se encuentra al final de línea. Esta información sigue siendo desconocida y es potencialmente de mucha ayuda.
Code: Select all
Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90 o 6c89"
while pos := RegExMatch(Clipboard, "\d+\D+\K\d+", m, pos ? pos + StrLen(m) : 1)
MsgBox, % m
Re: Ayuda con Clipboard
Gracias por responder. Con este Clipboard no funciona.sofista wrote: ↑14 Jul 2022, 15:18Veo, pero tiene arreglo con esta otra expresión que captura los cuatro casos requeridos: selecciona uno o más dígitos precedidos por uno o más dígitos y uno o más caracteres que no sean dígitos.
Un dato relevante es establecer el o los caracteres que puede/n seguir al número a capturar o si éste se encuentra al final de línea. Esta información sigue siendo desconocida y es potencialmente de mucha ayuda.Code: Select all
Clipboard := "En ocasiones mi Clipboard contiene algo como esto i1�31 o esto p9�c5 o esto otro j5¢90 o 6c89" while pos := RegExMatch(Clipboard, "\d+\D+\K\d+", m, pos ? pos + StrLen(m) : 1) MsgBox, % m
Code: Select all
Clipboard := "p123"
while pos := RegExMatch(Clipboard, "\d+\D+\K\d+", m, pos ? pos + StrLen(m) : 1)
MsgBox, % m
Re: Ayuda con Clipboard Topic is solved
Ah, bueno, esta información simplifica el problema y la expresión regular:
Code: Select all
data := "
(
bla bla42 i1�31
561 bla5bla p9�c5
j5¢90
6c89
p123
)"
while pos := RegExMatch(data, "\d+(?=\R|$)", m, pos ? pos + StrLen(m) : 1)
MsgBox, % m
Re: Ayuda con Clipboard
@sofista
Perdón por la demora en responder, funciona muy bien. Muchas gracias por todo el apoyo.
Perdón por la demora en responder, funciona muy bien. Muchas gracias por todo el apoyo.
Re: Ayuda con Clipboard
No hay problema. Me alegra haber sido de ayuda
Who is online
Users browsing this forum: No registered users and 5 guests