正则表达式在Expect缓冲区中查找字符串

时间:2010-01-05 16:13:23

标签: regex string scripting tcl expect

我正在尝试找到一个正则表达式,用于匹配一串转义字符(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中另一个变量中的数字?

2 个答案:

答案 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 所以如果其中任何一个没有意义,或者如果您对交互标志有任何更深入的了解,请直接指导我。