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?
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>
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
^ 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'
The simplest answer is to simply not use a raw string. You can escape backslashes by using
If you have huge numbers of backslashes in some segments, then you could concatenate raw strings and normal strings as needed:
r"some string \ with \ backslashes" "\n"
(Python automatically concatenates string literals with only whitespace between them.)
Remember if you are working with paths on Windows, the easiest option is to just use forward slashes - it will still work fine.