What is 're.M'?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Mon Jul 7 10:46:19 EDT 2014


On Mon, 07 Jul 2014 07:08:53 -0700, rxjwg98 wrote:

> More specific, what does 're.M' means?


Feel free to look at it interactively. re.M is a flag to control the 
meaning of the regular expression. It is short for re.MULTILINE, just as 
re.I is short for re.IGNORECASE:

py> import re
py> re.M == re.MULTILINE
True
py> re.I == re.IGNORECASE
True


They are just numeric flags:

py> re.I
2
py> re.M
8

so you can combine then:


py> re.I | re.M
10


re.M turns on "multi-line matching". This changes the meaning of the 
special characters ^ and $.

Standard mode:
	^ matches the start of the string
	$ matches the end of the string

Multi-line mode:
	^ matches the start of each line
	$ matches the end of each line


Here is an example. Copy and paste this into the interpreter:


import re
text = """First line.
Second line.
Third line."""
pattern = "^.*$"  # Match anything from the start to end.


By default, . does not match newlines, so by default the regex matches 
nothing:


py> re.search(pattern, text) is None  # Nothing matches!
True


If you use MULTILINE mode, $ matches the end of the first line:


py> re.search(pattern, text, re.M).group()
'First line.'


If you add MULTILINE mode and DOTALL mode, it matches everything:

py> re.search(pattern, text, re.M|re.S).group()
'First line.\nSecond line.\nThird line.'


See the reference manual for more details:

https://docs.python.org/3/library/re.html#module-contents
(Python 3)

https://docs.python.org/2/library/re.html#module-contents
(Python 2)



-- 
Steven



More information about the Python-list mailing list