How do I find possible matches using regular expression?

Peter Otten __peter__ at web.de
Thu Nov 23 05:55:46 EST 2006


Andy wrote:

> I'm trying to do some predicting work over user input, here's my
> question:
> 
> for pattern r'match me', the string 'no' will definitely fail to match,
> but 'ma' still has a chance if user keep on inputting characters after
> 'ma', so how do I mark 'ma' as a possible match string?

The following may or may not work in the real world:

import re

def parts(regex, flags=0):
    candidates = []
    for stop in reversed(range(1, len(regex)+1)):
        partial = regex[:stop]
        try:
            r = re.compile(partial + "$", flags)
        except re.error:
            pass
        else:
            candidates.append(r)
    candidates.reverse()
    return candidates

if __name__ == "__main__":
    candidates = parts(r"[a-z]+\s*=\s*\d+", re.IGNORECASE)
    def check(*args):
        s = var.get()
        for c in candidates:
            m = c.match(s)
            if m:
                entry.configure(foreground="#008000")
                break
        else:
            entry.configure(foreground="red")


    import Tkinter as tk
    root = tk.Tk()
    var = tk.StringVar()
    var.trace_variable("w", check)
    entry = tk.Entry(textvariable=var)
    entry.pack()
    root.mainloop()

The example lets you write an assignment of a numerical value, e. g

meaning = 42

and colours the text in green or red for legal/illegal entries.

Peter



More information about the Python-list mailing list