What does {!r} mean in Python?

In Python, what does preceding a string literal with "r" mean?

  • I first saw it used in building regular expressions across multiple lines as a method argument to re.compile, so I assumed that "r" stands for regex. For example: regex = re.compile( r'^[A-Z]' r'[A-Z0-9-]' r'[A-Z]$', re.IGNORECASE ) But I played around with different characters and found that it also worked for the Unicode marker "u", and that it didn't have to be a method argument. For example: s = ( u'The' u'quick' u'brown' u'fox' ) would result to the Unicode string: u'Thequickbrownfox'. I also stumbled on another character that was allowed, "b". I'm only familiar with "u" meaning Unicode. What does "r" (and "b") mean, and are there other such markers? I'm having a hard time searching the docs for the answer, since I don't know what they're formally called. (A wild guess: "b" stands for byte, or single-byte characters)

  • Answer:

    The r means that the string is to be treated as a raw string, which means all escape codes will be ignored. For an example: '\n' will be treated as a newline character, while r'\n' will be treated as the characters \ followed by n. 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 literal r"\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. Source: http://docs.python.org/reference/lexical_analysis.html#string-literals

Nikki Erwin Ramirez at Stack Overflow Visit the source

Was this solution helpful to you?

Other answers

It means that escapes won’t be translated. For example: r'\n' is a string with a backslash followed by the letter n. (Without the r it would be a newline.) b does stand for byte-string and is used in Python 3, where strings are Unicode by default. In Python 2.x strings were byte-strings by default and you’d use u to indicate Unicode.

Nate

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.