Expressão regular para encontrar corda em esperar tampão
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?
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})