web-dev-qa-db-fra.com

Que signifie "littéral" précédant un littéral de chaîne?

Je l'ai d'abord vu utilisé dans la construction d'expressions régulières sur plusieurs lignes en tant qu'argument de méthode pour re.compile(), alors j'ai supposé que r signifiait RegEx.

Par exemple:

regex = re.compile(
    r'^[A-Z]'
    r'[A-Z0-9-]'
    r'[A-Z]$', re.IGNORECASE
)

Alors, que signifie r dans ce cas? Pourquoi en avons-nous besoin?

109
Nikki Erwin Ramirez

Le r signifie que la chaîne doit être traitée comme une chaîne brute, ce qui signifie que tous les codes d'échappement seront ignorés.

À titre d'exemple:

'\n' sera traité comme un caractère de nouvelle ligne, tandis que r'\n' sera traité comme les caractères \ suivi de n.

Quand un 'r' ou 'R' Le préfixe _ est présent, un caractère après une barre oblique inverse est inclus dans la chaîne sans changement et toutes les barres obliques inverses sont laissées dans la chaîne. Par exemple, le littéral de chaîne r"\n" se compose de deux caractères: une barre oblique inverse et une minuscule 'n'. Les guillemets peuvent être échappés avec une barre oblique inverse, mais la barre oblique inverse reste dans la chaîne; par exemple, r"\"" est un littéral valide composé de deux caractères: une barre oblique inverse et une citation double; r"\" n'est pas un littéral de chaîne valide (même une chaîne brute ne peut pas se terminer par un nombre impair de barres obliques inverses). Plus précisément, une chaîne brute ne peut pas se terminer par une simple barre oblique inversée (car la barre oblique inverse échapperait au caractère de citation suivant). Notez également qu'une simple barre oblique inverse suivie d'une nouvelle ligne est interprétée comme ces deux caractères faisant partie de la chaîne et non comme une continuation de ligne.

Source: littéraux de chaîne Python

142

Cela signifie que les fuites ne seront pas traduites. Par exemple:

r'\n'

est une chaîne avec une barre oblique inverse suivie de la lettre n. (Sans le r ce serait une nouvelle ligne.)

b signifie byte-string et est utilisé dans Python 3, où les chaînes sont au format Unicode par défaut. In Python 2.x chaînes étaient des chaînes d'octets par défaut et vous utiliseriez u pour indiquer Unicode.

28
Nate