Регулярное выражение для поиска строки в буфере Expect

StackOverflow https://stackoverflow.com/questions/2007321

Вопрос

Я пытаюсь найти регулярное выражение, которое соответствует строке escape-символов (ожидаемый ответ, см. этот вопрос) и шестизначное число (с буквенно-цифровым первым символом).

Вот вся строка, которую мне нужно идентифицировать:

\r\n\u001b[1;14HX76196

В конечном итоге мне нужно извлечь строку:

X76196 

Вот что у меня уже есть:

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

Мне нужно идентифицировать escape-символы, чтобы убедиться, что это поле в этой области экрана.Итак, мне нужно регулярное выражение, включающее эту первую часть, но меня смущает обратная косая черта...

Кроме того, если у меня есть полная строка в переменной $number, как мне изолировать только число в другой переменной в Tcl?

Это было полезно?

Решение 2

Немного покопавшись, я узнал кое-что.Прежде всего, я смотрел не на вывод программы, а на ввод пользователя.Мне нужно было добавить флаг «-o», чтобы просмотреть вывод программы.Я также сократил регулярное выражение до необходимой части.

Пример регулярного выражения из @рих заставил меня посмотреть, почему его или мое собственное регулярное выражение дает сбой, и это произошло из-за того, что я смотрел не на выходные данные, а на входные данные.Таким образом, исходное регулярное выражение, которое я пробовал, было не виновато, а просматриваемые данные (отсутствовал флаг «-o»)

Вот полный ответ на мою проблему.

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

Я нуб с Expect и Tcl так что, если что-то из этого не имеет смысла или если у вас есть какие-либо дополнительные сведения о флагах взаимодействия, пожалуйста, проясните меня.

Другие советы

Если вам просто нужен номер в конце, этого должно быть достаточно...

[0-9]{6}

Обновление с новой информацией

Предполагая, что — это символ новой строки, а не буквальный \, за которым следует буквальный n, вы можете сделать это...

\r\n\u001B\[1;14H(X[0-9]{5})
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top