Pergunta

Eu estou tentando encontrar um regex que as obras para coincidir com uma seqüência de caracteres de escape (uma resposta Espere, consulte esta questão ) e um número de seis dígitos (com primeiro caractere alfa-numérico).

Aqui está a seqüência inteira eu preciso identificar:

\r\n\u001b[1;14HX76196

Em última análise, eu preciso extrair a seqüência:

X76196 

Aqui está o que eu já tenho:

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

Eu preciso para identificar os caracteres de escape para verificar se ele é um campo em que a região da tela. Então eu preciso de um regex que inclui essa primeira parte, mas as barras invertidas estão confundindo me ...

Além disso, uma vez que tenho a cadeia completa na variável número $, como faço para isolar apenas o número em outra variável em Tcl?

Foi útil?

Solução 2

Eu descobri algumas coisas com mais algumas escavações. Primeiro de tudo eu não estava olhando para a saída do programa, mas a entrada do usuário. I necessário para adicionar a bandeira "-o" para olhar para a saída do programa. Eu também encurtou o regex apenas a parte necessária.

O exemplo regex de @rikh levou-me a olhar por seu ou o meu próprio regex estava falhando, e isso foi devido ao fato de que eu não estava olhando para a saída, mas a entrada. Assim, a regex original que eu tentei não estava em falta, mas os dados sendo olhado (faltando o "-o" flag)

Aqui está a resposta completa para o meu 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"
    }   
}

Eu sou um Noob com Espere e Tcl isso, se nada disto não faz sentido ou se você tiver mais insights sobre as bandeiras interagem, por favor me definir reta.

Outras dicas

Se você quiser apenas o número no final, então isso deve ser suficiente ...

[0-9]{6}

Atualização com novas informações

Assumindo que \ n é um caractere de nova linha, em vez de um literal \ seguido por um n literal, você pode fazer isso ...

\r\n\u001B\[1;14H(X[0-9]{5})
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top