How to match a newline character in a raw string?

python, python-re, rawstring, regex

Solution

In a regular expression, you need to specify that you're in multiline mode:

>>> import re
>>> s = """cat
... dog"""
>>> 
>>> re.match(r'cat\ndog',s,re.M)
<_sre.SRE_Match object at 0xcb7c8>

Notice that `re` translates the `\n` (raw string) into newline. As you indicated in your comments, you don't actually need `re.M` for it to match, but it does help with matching `$` and `^` more intuitively:

>> re.match(r'^cat\ndog',s).group(0)
'cat\ndog'
>>> re.match(r'^cat$\ndog',s).group(0)  #doesn't match
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r'^cat$\ndog',s,re.M).group(0) #matches.
'cat\ndog'

Problem

I got a little confused about Python raw string. I know that if we use raw string, then it will treat `'\'` as a normal backslash (ex. `r'\n'` would be `\` and `n`). However, I was wondering what if I want to match a new line character in raw string. I tried `r'\\n'`, but it didn't work. Anybody has some good idea about this?

Original source

Related problems