Search code examples
regexregex-lookaroundslookbehind

Python regex lookbehind and lookahead


I need to match the string "foo" from a string with this format:

string = "/foo/boo/poo"

I tied this code:

poo = "poo"
foo = re.match('.*(?=/' + re.escape(poo) + ')', string).group(0)

and it gives me /foo/boo as the content of the variable foo (instead of just foo/boo).

I tried this code:

poo = "poo"
foo = re.match('(?=/).*(?=/' + re.escape(poo) + ')', string).group(0)

and I'm getting the same output (/foo/boo instead of foo/boo).

How can I match only the foo/boo part?


Solution

  • Hey try the following regex:

    (?<=/).*(?=/poo)
    ^^^^^^
    

    It will not take into account your first slash in the result.

    Tested regex101: https://regex101.com/r/yzMkTg/1

    Transform your code in the following way and it should work:

    poo = "poo"
    foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
    

    Have a quick look at this link for more information about the behavior of Positive lookahead and Positive lookbehind

    http://www.rexegg.com/regex-quickstart.html