1

我正在尝试找到一个正则表达式,它可以匹配一串转义字符(期望响应,请参阅此问题)和六位数字(带有字母数字第一个字符)。

这是我需要识别的整个字符串:

\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 的另一个变量中隔离数字?

4

2 回答 2

1

如果你只想要最后的数字,那么这应该足够了......

[0-9]{6}

更新新信息

假设 \n 是换行符,而不是文字 \ 后跟文字 n,您可以这样做...

\r\n\u001B\[1;14H(X[0-9]{5})
于 2010-01-05T16:17:29.813 回答
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"
    }   
}

我是Expect 和 Tcl的菜鸟,所以如果其中任何一个没有意义,或者如果您对交互标志有更多见解,请让我直截了当。

于 2010-01-06T15:52:02.863 回答