Что такое r-строки и как их использовать в Python

Раздел: Основы Python -> Строки

Обзор r-строк в Python

В Python строки с префиксом r или R называются сырыми (raw) строками. В таких строках обратная косая черта (\) перестаёт быть escape-символом и воспринимается буквально. Это удобно для путей Windows, регулярных выражений и любого текста, где обратные слеши должны сохраняться.

Основное решение: использование r-строки для отмены экранирования

Чтобы избежать удвоения обратных слешей в путях или шаблонах, достаточно поставить r перед открывающей кавычкой. Например:

path = r"C:\Users\Name\Documents"
print(path)

Python strip (метод strip в python)

C:\Users\Name\Documents

Python повторить строку (повторение строки в python)

В обычной строке пришлось бы писать "C:\\Users\\Name\\Documents". r-строка решает эту проблему. Однако r-строка не может заканчиваться нечётным количеством обратных слешей (кроме случая с тройными кавычками).

Как использовать r-строки для путей в Windows?

Проблема: в обычной строке обратный слеш интерпретируется как начало escape-последовательности (\n, \t). Для пути C:\new\folder это приведёт к появлению символов новой строки и табуляции. Решение - r-строка:

windows_path = r"D:\проекты\python\data"
print(windows_path)

Tuple в str python (преобразование кортежа в строку в python)

D:\проекты\python\data

Python объект в строку (преобразование объекта в строку в python)

Цель: корректное хранение и передача путей без лишнего экранирования. Важно: r-строка не изменяет саму строку, она лишь отключает обработку escape-последовательностей.

Как применить r-строки в регулярных выражениях?

В модуле re обратная косая черта также используется для спецсимволов (\d, \s). Без r-строки приходится удваивать слеши: "\\d". С r-строкой шаблон выглядит естественно:

import re
pattern = r"\d{3}-\d{2}-\d{4}"
text = "Ssn: 123-45-6789"
match = re.search(pattern, text)
print(match.group())

Python convert string (преобразование строк в python)

123-45-6789

Python str to bytes (преобразование строки в байты в python)

Цель: упрощение чтения и написания регулярных выражений. Без r-строки шаблон бы выглядел как "\\d{3}-\\d{2}-\\d{4}", что менее наглядно.

Что делать, если r-строка заканчивается обратной косой чертой?

Проблема: синтаксическая ошибка при попытке создать r-строку с завершающим одиночным слешем, например r"\" - возникает SyntaxError, так как кавычка экранируется слешем, но слеш не может быть последним в строке. Аналогичная ситуация с любым нечётным количеством слешей в конце. Решение: добавить пробел или использовать конкатенацию с обычной строкой:

# Ошибка:
# path = r"C:\"
# Правильно:
path = r"C:" + "\\"
print(path)

функция разделить python (разделение строки на список в python)

C:\

вывести первый символ строки python (вывести первый символ строки в python)

Или использовать тройные кавычки, в которых завершающий слеш допустим: r"""C:\""" - но в этом случае строка будет содержать два слеша (сам слеш и символ перевода строки?). На практике проще не ставить слеш в конце.

Ещё одна типичная ошибка - путаница с экранированием кавычек внутри r-строки. В r-строке обратный слеш не экранирует ничего, поэтому для включения кавычки необходимо использовать разные типы кавычек снаружи или комбинировать:

# Ошибка: r"Он сказал: "Привет"" - неверно
# Решение:
s1 = r'Он сказал: "Привет"'
s2 = r"Он сказал: \"Привет\""  # слеш останется
print(s1)
print(s2)

вывести символ строки python (вывод символа строки в python)

Он сказал: "Привет"
Он сказал: \"Привет\"

Важно помнить: в r-строке \" - это буквально обратный слеш и кавычка, а не экранированная кавычка.

- задания на строки python (задания на строки в python)
- замена символов python (замена символов в строке python)
- Python первое слово в строке (извлечение первого слова из строки в python)

Расширенные примеры использования r-строк

Ниже приведены дополнительные сценарии, демонстрирующие гибкость r-строк и нюансы их поведения.

Пример 1: многострочные r-строки с тройными кавычками

Тройные кавычки (""" или ''') позволяют создавать многострочные строки. В сочетании с r-префиксом все символы, включая обратные слеши, сохраняются буквально.

Пример
multiline = r"""Строка 1\Строка 2\Строка 3"""
print(multiline)
Строка 1\Строка 2\Строка 3

Обратите внимание: символы новой строки в тройных кавычках остаются, а обратные слеши не создают escape-последовательностей. Это удобно для хранения путей с пробелами или конфигурационных файлов.

Пример 2: r-строки внутри f-строк (f-strings с префиксом r)

Начиная с Python 3.6 можно комбинировать r- и f-префиксы, получив fr или rf. Это позволяет вставлять значения переменных в сырую строку.

Пример
name = "user"
path = fr"C:\Users\{name}\Desktop"
print(path)
C:\Users\user\Desktop

Важно: сначала обрабатывается f-часть (интерполяция), затем r-часть (отключение экранирования). Обратные слеши, стоящие до фигурных скобок, остаются; после интерполяции могут появиться новые слеши, но они не будут экранироваться.

Пример 3: r-строка в регулярном выражении с группами и флагами

Использование r-строки упрощает написание сложных шаблонов, содержащих обратные ссылки и модификаторы.

Пример
import re
text = "Цена: 100.50 руб."
# Шаблон: число с плавающей точкой
pattern = r"(\d+)\.(\d+)"
match = re.search(pattern, text)
if match:
    print("Целая часть:", match.group(1))
    print("Дробная часть:", match.group(2))
Целая часть: 100
Дробная часть: 50

Если бы мы использовали обычную строку, пришлось бы писать "(\\d+)\\.(\\d+)", что заметно менее читаемо.

Пример 4: r-строка и escape-последовательности Unicode

В r-строке последовательности вида \uXXXX или \UXXXXXXXX не преобразуются в символы Unicode, а остаются буквальным текстом.

Пример
raw_unicode = r"\u0041"
print(raw_unicode)
print(len(raw_unicode))
\u0041
6

Если требуется получить символ 'A' (код 0x41), необходимо использовать обычную строку или явно вызвать .encode().decode('unicode-escape').

Пример 5: r-строка с квадратными скобками и специальными символами

В регулярных выражениях внутри символьных классов ([]) некоторые символы теряют специальное значение. r-строка позволяет не задумываться об экранировании лишних слешей.

Пример
import re
text = "Температура: -5*C"
pattern = r"[\-\d]+\*C"
match = re.search(pattern, text)
print(match.group() if match else "Не найдено")
-5*C

В обычной строке пришлось бы писать "[\\-\\d]+\\*C", что легко приводит к ошибкам.

Пример 6: r-строка для сохранения обратных слешей в тексте (например, LaTeX)

При работе с LaTeX-кодом часто встречаются обратные слеши: \section. r-строка сохраняет их как есть.

Пример
latex_code = r"\section{Введение} \label{sec:intro}"
print(latex_code)
\section{Введение} \label{sec:intro}

Без r-строки пришлось бы удваивать каждый слеш: "\\section{Введение} \\label{sec:intro}".

Пример 7: конкатенация r-строки и обычной строки

Иногда нужно добавить escape-последовательность в конец r-строки. Например, получить строку с переводом строки в конце.

Пример
base = r"C:\temp"
full = base + "\\n"
print(repr(full))
'C:\\temp\n'

Результат: в строке full появился реальный символ новой строки, так как "\\n" в обычной строке даёт escape-последовательность. Это один из способов обойти ограничение r-строки на завершающий слеш.

r-строки (сырые строки) - comments

En
R строки в python (python)