Issue 3587: Bad parsing of compiling regex with re.MULTILINE (original) (raw)

import re regex = r"[\w]+"

Normal behaviour:

re.findall(regex, "hello world", re.M) ['hello', 'world'] re.compile(regex).findall("hello world") ['hello', 'world']

Bug behaviour:

re.compile(regex).findall("hello world", re.M) ['rld']

The re.M flag is an attribute of the compiled pattern, and as such it must be passed to compile(), not to findall().

These all work:

re.compile(r"[a-z]+").findall("hello world") ['hello', 'world'] re.compile(r"[a-z]+", re.M).findall("hello world") ['hello', 'world'] re.compile(r"(?m)[a-z]+").findall("hello world") ['hello', 'world']

The second argument to the findall() method of compile objects is the start position to match from (see http://docs.python.org/lib/re-objects.html). This explains the behaviour you are witnessing:

re.M 8 re.compile(r"[a-z]+").findall("hello world", 8) ['rld']