Expression régulière pour trouver chaîne en mémoire tampon Attendez-vous
Question
Je suis en train de trouver une expression régulière qui travaille pour correspondre à une chaîne de caractères d'échappement (une réponse Attendez-vous, voir cette question ) et un nombre à six chiffres (avec le premier caractère alpha-numérique).
Voici la chaîne entière, je dois identifier:
\r\n\u001b[1;14HX76196
En fin de compte, je dois extraire la chaîne:
X76196
Voici ce que je l'ai déjà:
interact {
#...
#...
#this expression does not identify the screen location
#I need to find "\r\n\u001b[1;14H" AND "([a-zA-Z0-9]{1})[0-9]{5}$"
#This regex was what I was using before.
-nobuffer -re {^([a-zA-Z0-9]{1})?[0-9]{5}$} {
set number $interact_out(0,string)
}
Je dois identifier les caractères d'échappement pour vérifier qu'il est un champ dans cette région de l'écran. Alors je besoin d'un regex qui comprend la première partie, mais les anti-slash me confonds ...
Aussi une fois que je la chaîne complète dans la variable $ nombre, comment puis-je isoler seulement le nombre dans une autre variable Tcl?
La solution 2
J'ai découvert quelques petites choses avec un peu plus creuser. Tout d'abord, je ne regardais pas la sortie du programme, mais l'entrée de l'utilisateur. Je avais besoin d'ajouter le drapeau « -o » pour regarder la sortie du programme. J'écourté aussi l'expression rationnelle juste la partie nécessaire.
L'exemple de regex @rikh m'a amené à regarder pourquoi son ou mon regex échouait, et cela était dû au fait que je ne cherchais pas à la sortie, mais l'entrée. Ainsi, le regex d'origine que j'ai essayé était pas en faute, mais les données regardé (manque le drapeau « -o »)
Voici la réponse complète à mon problème.
interact {
#...
-o -nobuffer -re {(\[1;14H[a-zA-Z0-9]{1})[0-9]{5}} {
#get number in place
set numraw $interact_out(0,string)
#get just number out
set num [string range $numraw 6 11]
#switch to lowercase
set num [string tolower $num]
send_user " stored number: $num"
}
}
Je suis un Noob avec attendre et Tcl si tout cela
n'a pas de sens ou si vous avez d'autres aperçus sur les drapeaux Interact, s'il vous plaît me détromper.Autres conseils
Si vous voulez juste le numéro à la fin, alors cela devrait être suffisant ...
[0-9]{6}
Mise à jour avec de nouvelles informations
En supposant \ n est un caractère de nouvelle ligne, plutôt que d'un littéral \ suivi d'un n littéral, vous pouvez le faire ...
\r\n\u001B\[1;14H(X[0-9]{5})