Domanda

Sto cercando di trovare un'espressione regolare che lavora per abbinare una stringa di caratteri di escape (una risposta Expect, vedere questa domanda ) e un numero di sei cifre (primo carattere alfanumerico).

Ecco l'intera stringa ho bisogno di identificare:

\r\n\u001b[1;14HX76196

In definitiva ho bisogno di estrarre la stringa:

X76196 

Ecco quello che ho già:

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)
        }   

Ho bisogno di identificare i caratteri di escape per verificare che si tratta di un campo in quella regione dello schermo. Così ho bisogno di un'espressione regolare che include tale prima parte, ma le barre inverse mi sono confuse ...

Anche una volta che ho la stringa completa nella variabile $ numero, come faccio a isolare solo il numero in un'altra variabile in Tcl?

È stato utile?

Soluzione 2

ho scoperto un paio di cose con un po 'di scavo. Prima di tutto io non guardavo all'uscita del programma, ma l'input dell'utente. Avevo bisogno di aggiungere il "-o" bandiera a guardare il programma di uscita. Ho anche ridotto la regex per solo la parte necessaria.

L'esempio espressione regolare da @rikh mi ha portato a capire perché il suo o il mio regex stava fallendo, e che è stato a causa del fatto che io non guardavo in uscita, ma l'ingresso. Così l'espressione regolare originale che ho provato non era in colpa, ma i dati di essere guardato (manca il flag "-o")

Ecco la risposta completa al mio problema.

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"
    }   
}

Sono un niubbo con Expect e Tcl , quindi se tutto questo non ha senso, o se avete altre intuizioni le bandiere Interact, impostare me dritto.

Altri suggerimenti

Se si desidera solo il numero alla fine, allora questo dovrebbe essere sufficiente ...

[0-9]{6}

Aggiornamento con nuove informazioni

Supponendo \ n è un carattere di nuova linea, piuttosto che un letterale \ seguito da un n letterale, si può fare questo ...

\r\n\u001B\[1;14H(X[0-9]{5})
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top