What does \ r mean in python?

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
)

So what does r mean in this case? Why do we need it?

What does  r mean in python?

Remi Guan

20.5k17 gold badges62 silver badges83 bronze badges

asked Jan 24, 2011 at 8:48

1

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: Python string literals

answered Jan 24, 2011 at 8:49

2

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.

answered Jan 24, 2011 at 8:49

What does  r mean in python?

1

Not the answer you're looking for? Browse other questions tagged python string syntax literals rawstring or ask your own question.

Summary: in this tutorial, you will learn about the Python raw strings and how to use them to handle strings that treat the backslashes as literal characters.

Introduction the Python raw strings

In Python, when you prefix a string with the letter r or R such as r'...' and R'...', that string becomes a raw string. Unlike a regular string, a raw string treats the backslashes (\) as literal characters.

Raw strings are useful when you deal with strings that have many backslashes, for example, regular expressions or directory paths on Windows.

To represent special characters such as tabs and newlines, Python uses the backslash (\) to signify the start of an escape sequence. For example:

s = 'lang\tver\nPython\t3' print(s)

Code language: Python (python)

Output:

lang ver Python 3

Code language: Python (python)

However, raw strings treat the backslash (\) as a literal character. For example:

s = r'lang\tver\nPython\t3' print(s)

Code language: Python (python)

Output:

lang\tver\nPython\t3

Code language: Python (python)

A raw string is like its regular string with the backslash (\) represented as double backslashes (\\):

s1 = r'lang\tver\nPython\t3' s2 = 'lang\\tver\\nPython\\t3' print(s1 == s2) # True

Code language: Python (python)

In a regular string, Python counts an escape sequence as a single character:

s = '\n' print(len(s)) # 1

Code language: Python (python)

However, in a raw string, Python counts the backslash (\) as one character:

s = r'\n' print(len(s)) # 2

Code language: Python (python)

Since the backslash (\) escapes the single quote (') or double quotes ("), a raw string cannot end with an odd number of backslashes.

For example:

s = r'\'

Code language: Python (python)

Error:

SyntaxError: EOL while scanning string literal

Code language: Python (python)

Or

s = r'\\\'

Code language: Python (python)

Error:

SyntaxError: EOL while scanning string literal

Code language: Python (python)

Use raw strings to handle file path on Windows

Windows OS uses backslashes to separate paths. For example:

c:\user\tasks\new

Code language: Python (python)

If you use this path as a regular string, Python will issue a number of errors:

dir_path = 'c:\user\tasks\new'

Code language: Python (python)

Error:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX escape

Code language: Python (python)

Python treats \u in the path as a Unicode escape but couldn’t decode it.

Now, if you escape the first backslash, you’ll have other issues:

dir_path = 'c:\\user\tasks\new' print(dir_path)

Code language: Python (python)

Output:

c:\user asks ew

Code language: Python (python)

In this example, the \t is a tab and \n is the newline.

To make it easy, you can turn the path into a raw string like this:

dir_path = r'c:\user\tasks\new' print(dir_path)

Code language: Python (python)

Convert a regular string into a raw string

To convert a regular string into a raw string, you use the built-in repr() function. For example:

s = '\n' raw_string = repr(s) print(raw_string)

Code language: Python (python)

Output:

'\n'

Code language: Python (python)

Note that the result raw string has the quote at the beginning and end of the string. To remove them, you can use slices:

s = '\n' raw_string = repr(s)[1:-1] print(raw_string)

Code language: Python (python)

Summary

  • Prefix a literal string by the letter r or R to turn it into a raw string.
  • Raw strings treat backslash a literal character.

Did you find this tutorial helpful ?

What does \r do in Python string?

In Python strings, the backslash "\" is a special character, also called the "escape" character. It is used in representing certain whitespace characters: "\t" is a tab, "\n" is a newline, and "\r" is a carriage return.

What is R format in Python?

format() formatting operations; it only works in old-style % string formatting. It indeed converts the object to a representation through the repr() function. In str. format() , ! r is the equivalent, but this also means that you can now use all the format codes for a string.