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?

Était-ce utile?

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})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top