catastrophic regexp, help!

Chris cwitts at gmail.com
Wed Jun 11 10:25:58 CEST 2008


On Jun 11, 6:20 am, cirfu <circularf... at yahoo.se> wrote:
> pat = re.compile("(\w* *)*")
> this matches all sentences.
> if fed the string "are you crazy? i am" it will return "are you
> crazy".
>
> i want to find a in a big string a sentence containing Zlatan
> Ibrahimovic and some other text.
> ie return the first sentence containing the name Zlatan Ibrahimovic.
>
> patzln = re.compile("(\w* *)* zlatan ibrahimovic (\w* *)*")
> should do this according to regexcoach but it seems to send my
> computer into 100%CPU-power and not closable.

Maybe something like this would be of use...

def sentence_locator(s, sub):
    cnt = s.upper().count(sub.upper())
    if not cnt:
        return None
    tmp = []
    idx = -1
    while cnt:
        idx = s.upper().find(sub.upper(), (idx+1))
        a = -1
        while True:
            b = s.find('.', (a+1), idx)
            if b == -1:
                b = s.find('.', idx)
                if b == -1:
                    tmp.append(s[a+1:])
                    break
                tmp.append(s[a+1:b+1])
                break
            a = b
        cnt -= 1
    return tmp



More information about the Python-list mailing list