我正在尝试找到一个正则表达式,用于匹配一串转义字符(Expect响应,请参阅this question)和一个六位数字(带字母数字的第一个字符)。
这是我需要识别的整个字符串:
\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)
}
我需要识别转义字符以验证它是该屏幕区域中的字段。所以我需要一个包含第一部分的正则表达式,但反斜杠让我感到困惑......
此外,一旦我在$ number变量中有完整的字符串,我如何只隔离Tcl中另一个变量中的数字?
答案 0 :(得分:1)
如果你只想要最后的数字,那么这应该就够了......
[0-9]{6}
使用新信息进行更新
假设\ n是换行符,而不是文字\后跟文字n,你可以这样做......
\r\n\u001B\[1;14H(X[0-9]{5})
答案 1 :(得分:0)
我发现了一些更多挖掘的东西。首先,我没有看到程序的输出,而是用户的输入。我需要添加“-o”标志来查看程序输出。我还将正则表达式简化为必要部分。
来自 @rikh 的正则表达式示例让我看看为什么他或我自己的正则表达式失败,这是因为我没有看输出而是输入。所以我试过的原始正则表达式没有错,但正在查看数据(缺少“-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"
}
}
我是一个 noob with Expect和Tcl 所以如果其中任何一个没有意义,或者如果您对交互标志有任何更深入的了解,请直接指导我。