Reputation: 1179
I am try to understand this code:
Var1 = re.compile(r"nothing is (\d+)").search
i am want to see what is the affect of the r notation right after the ( sign on the \d. i know that \d mean to find decimal numbers (the \ mean that d has a special meaning), is that mean that without the r notation i would use \ ? if so why ? i know that at the bash shell it is enough to put just one \ .
i have read here: http://docs.python.org/library/re.html#raw-string-notation
but i'm can't understand how it affects the snippets code above. Thanks.
Upvotes: 4
Views: 992
Reputation: 838746
It's a raw string literal. It changes backslashes to be treated literally (almost, see below). This is particularly useful when writing regular expressions as they often contain backslashes and if you use ordinary string literal you may have to escape the backslashes, making the regular expression harder to read.
Without the r
your code would look like this:
f = re.compile("nothing is (\\d+)").search
Note that not escaping the backslashes also works in this case because '\d'
is not a valid escape sequence:
f = re.compile("nothing is (\d+)").search
However, relying on this behaviour may result in errors unless you (and everyone who has to maintain your code) can memorize the list of allowable escape sequences.
The rules for raw string literals are:
When an
'r'
or'R'
prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string. For example, the string literalr"\n"
consists of two characters: a backslash and a lowercase'n'
. String quotes can be escaped with a backslash, but the backslash remains in the string; for example,r"\""
is a valid string literal consisting of two characters: a backslash and a double quote;r"\"
is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.
Upvotes: 6
Reputation: 204926
Has nothing to do with re
.
Python string literals may start with r
; these are called "raw strings" and backslash escapes are (mostly) not interpreted.
Upvotes: 0