Co oznacza literał poprzedzający łańcuch z "r"? [duplikat]

to pytanie ma już odpowiedzi tutaj : co dokładnie robią flagi łańcuchowe " u " i "r"i czym są surowe literały łańcuchowe? (7 odpowiedzi) Zamknięty 4 lata temu .

Po raz pierwszy zobaczyłem, że jest używany do budowania wyrażeń regularnych w wielu liniach jako argument metody re.compile(), więc założyłem, że r oznacza RegEx.

Na przykład:

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

Więc co oznacza r w tym przypadku? Po co nam to?

Author: Casimir Crystal, 2011-01-24

2 answers

r oznacza, że łańcuch ma być traktowany jako surowy, co oznacza, że wszystkie kody specjalne będą ignorowane.

Dla przykładu:

'\n' będzie traktowany jako znak nowej linii, natomiast r'\n' będzie traktowany jako znak \, po którym następuje n.

Gdy występuje przedrostek 'r' lub 'R', znak po odwrotnym ukośniku jest zawarte w ciągu bez zmian, i wszystkie ukośniki są pozostawione w sznurek. Na przykład ciąg znaków literal r"\n" składa się z dwóch znaki: odwrotny ukośnik i małe litery 'n'. Cytaty łańcuchowe mogą być uciekł z ukośnikiem, ale backslash pozostaje w łańcuchu; dla przykład, r"\"" jest prawidłowym ciągiem znaków literalna składająca się z dwóch znaków: a backslash and a double quote; r"\" nie jest poprawnym ciągiem znaków (nawet surowy ciąg znaków nie może kończyć się liczbą nieparzystą odwrotnych ukośników). W szczególności surowy ciąg nie może kończyć się pojedynczym ukośnik wsteczny (ponieważ ukośnik wsteczny byłby escape the następujący znak cytatu). Zauważ również, że pojedynczy ukośnik wsteczny interpretowany jest znak nowego wiersza jak te dwie postacie w ramach ciąg, nie jako kontynuacja linii.

Source: Python string literals

 191
Author: Sebastian Paaske Tørholm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 08:49:45

Oznacza to, że ucieczki nie będą tłumaczone. Na przykład:

r'\n'

Jest ciągiem znaków z odwrotnym ukośnikiem, po którym następuje litera n. (Bez r byłaby to nowa linia.)

b oznacza bajt-string i jest używany w Pythonie 3, gdzie łańcuchy są domyślnie Unicode. W Pythonie 2.ciągi x były domyślnie ciągami bajtowymi i używasz u do wskazania Unicode.

 35
Author: Nate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 08:49:08