English 中文(简体)
Regular Expression to find string in Expect buffer
原标题:

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:


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

最佳回答

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.

问题回答

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

[0-9]{6}

Update with new information

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


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




相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签