代码之家  ›  专栏  ›  技术社区  ›  jjclarkson Andy Rose

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

  •  1
  • jjclarkson Andy Rose  · 技术社区  · 15 年前

    我正试图找到一个与一系列转义字符匹配的regex(一个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 回复  |  直到 15 年前
        1
  •  1
  •   Rik Heywood    15 年前

    如果你只想把号码放在末尾,那么这就足够了…

    [0-9]{6}
    

    用新信息更新

    假设\n是换行符,而不是后面跟一个\字,您可以这样做…

    \r\n\u001B\[1;14H(X[0-9]{5})
    
        2
  •  0
  •   jjclarkson Andy Rose    15 年前

    我又挖了些东西发现了一些东西。首先,我看的不是程序的输出,而是用户的输入。我需要添加“-o”标志来查看程序输出。我还将regex缩短为必要的部分。

    regex示例来自 里克 引导我研究他或我自己的regex失败的原因,这是因为我不是在看输出,而是在看输入。所以我尝试的原始regex不是错误的,而是正在查看的数据(缺少“-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的noob 因此,如果这其中任何一个都没有意义,或者如果您对交互标志有更多的了解,请将我的观点纠正。