Регулярное выражение для поиска строки в буфере Expect
Вопрос
Я пытаюсь найти регулярное выражение, которое соответствует строке 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})