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?