Regular Expression to find string in Expect buffer

China☆狼群 提交于 2019-12-20 05:11:27

问题


I'm trying to find a regex that works to match a string of escape characters (an Expect response, see this question) and a six digit number (with alpha-numeric first character).

Here's the whole string I need to identify:

\r\n\u001b[1;14HX76196

Ultimately I need to extract the string:

X76196 

Here's what I have already:

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)
        }   

I need to identify the escape characters to to verify that it is a field in that screen region. So I need a regex that includes that first portion, but the backslashes are confusing me...

Also once I have the full string in the $number variable, how do I isolate just the number in another variable in Tcl?


回答1:


If you just want the number at the end, then this should be enough...

[0-9]{6}

Update with new information

Assuming \n is a newline character, rather than a literal \ followed by a literal n, you can do this...

\r\n\u001B\[1;14H(X[0-9]{5})



回答2:


I found out a few things with some more digging. First of all I wasn't looking at the output of the program but the input of the user. I needed to add the "-o" flag to look at the program output. I also shortened the regex to just the necessary part.

The regex example from @rikh led me to look at why his or my own regex was failing, and that was due to the fact that I wasn't looking at the output but the input. So the original regex that I tried wasn't at fault but the data being looked at (missing the "-o" flag)

Here's the complete answer to my problem.

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"
    }   
}

I'm a noob with Expect and Tcl so if any of this doesn't make sense or if you have any more insights into the interact flags, please set me straight.



来源:https://stackoverflow.com/questions/2007321/regular-expression-to-find-string-in-expect-buffer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!