Pregunta

Estoy tratando de encontrar una expresión regular que trabaja para coincidir con una cadena de caracteres de escape (esperar una respuesta, consulte esta pregunta ) y un número de seis dígitos (con primer carácter alfanumérico).

Aquí está toda la cadena que necesito para identificar:

\r\n\u001b[1;14HX76196

En última instancia lo que necesito para extraer la cadena:

X76196 

Esto es lo que ya tengo:

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

necesito para identificar los caracteres de escape para verificar que se trata de un campo en el que la región de la pantalla. Así que necesito una expresión regular que incluye la primera parte, pero las barras invertidas me está confundiendo ...

También una vez que tengo la cadena completa en la variable $ número, ¿cómo puedo aislar sólo el número en otra variable en Tcl?

¿Fue útil?

Solución 2

Me enteré de algunas cosas con un poco más de excavación. En primer lugar yo no estaba mirando a la salida del programa, pero la entrada del usuario. Tenía que añadir el "-o" bandera para mirar la salida del programa. También he acortado la expresión regular para sólo la parte necesaria.

El ejemplo de expresiones regulares de @rikh me llevó a analizar por qué su propia expresión regular o de mi estaba fallando, y que se debió al hecho de que yo no estaba mirando en la salida, pero la entrada. Así, el texto original que he intentado no tuvo la culpa, sino que los datos sean vistos (falta el "-o" bandera)

Aquí está la respuesta completa a mi 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"
    }   
}

Soy un novato con esperar y Tcl por lo que si nada de esto no tiene sentido o si tiene más conocimientos sobre las banderas de Interact, ajuste en mí directamente.

Otros consejos

Si lo que desea es el número al final, entonces esto debería ser suficiente ...

[0-9]{6}

Actualización con nueva información

Suponiendo \ n es un carácter de nueva línea, en lugar de un literal \ seguido de un n literal, se puede hacer esto ...

\r\n\u001B\[1;14H(X[0-9]{5})
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top