Наборы символов#
В Python есть специальные обозначения для наборов символов:
- \d — любая цифра
- \D — любое нечисловое значение
- \s — пробельные символы
- \S — все, кроме пробельных символов
- \w — любая буква, цифра или нижнее подчеркивание
- \W — все, кроме букв, цифр или нижнего подчеркивания
Это не все наборы символов, которые поддерживает Python. Подробнее смотрите в документации.
Наборы символов позволяют писать более короткие выражения без необходимости перечислять все нужные символы.
Например, получим время из строки лог-файла:
In [1]: log = '*Jul 7 06:15:18.695: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/3, changed state to down' In [2]: re.search(r'\d\d:\d\d:\d\d', log).group() Out[2]: '06:15:18'
Выражение \d\d:\d\d:\d\d описывает 3 пары чисел, разделенных двоеточиями.
Получение MAC-адреса из лог-сообщения:
In [3]: log2 = 'Jun 3 14:39:05.941: %SW_MATM-4-MACFLAP_NOTIF: Host f03a.b216.7ad7 in vlan 10 is flapping between port Gi0/5 and port Gi0/15' In [4]: re.search(r'\w\w\w\w\.\w\w\w\w\.\w\w\w\w', log2).group() Out[4]: 'f03a.b216.7ad7'
Выражение \w\w\w\w\.\w\w\w\w\.\w\w\w\w описывает 12 букв или цифр, которые разделены на три группы по четыре символа точками.
Группы символов очень удобны, но пока что приходится вручную указывать повторение символа. В следующем подразделе рассматриваются символы повторения, которые упростят описание выражений.
Спецсимволы, экранирование символов, raw-строки
Теперь, когда познакомились со строками и их методами, пришло время узнать, какие специальные символы могут содержать строки в Питоне. С одним из них мы уже сталкивались – это символ перевода строки:
Я напомню, например, когда задается многострочная строка:
то в ней автоматически добавляет этот символ перевода между строками:
Причем, это один символ, хотя он и выглядит как два символа: обратный слеш и n. Мы в этом легко можем убедиться, если воспользоваться функцией:
Получим значения 12 = 5 + 6 + 1 – как раз число символов в двух строках плюс один символ перевода строки.
Мало того, мы можем его явно прописывать в любой строке, формируя многострочный текст, например, так:
и, выводя эту строку с помощью функции:
Все их запоминать совсем не обязательно, на практике используются, в основном:
Значительно реже другие варианты. И, обратите внимание, перед каждым спецсимволом записан символ обратного слеша. Это, своего рода, маркер начала спецсимвола. И если после слеша идет одно из обозначений таблицы, то оно будет восприниматься как некая управляющая последовательность.
Давайте я все это продемонстрирую на примерах. Добавим в строку символ табуляции:
Теперь функция print() интерпретирует его, как особый горизонтальный отступ:
Если же мы уберем букву t:
то при печати увидим просто обратный слеш. В действительности, здесь сработала последняя строчка таблицы: когда не подходит ни одна последовательность, то просто печатается обратный слеш.
Но здесь нужно быть осторожным. Предположим, что мы слово needs хотим заключить в обратные слеши:
первый слеш пропадет, так как он будет восприниматься началом спецпоследовательности символа переноса строки. Поэтому, для добавления символа обратного слеша в строку, следует записывать два обратных слеша подряд:
Тогда в строке они будут автоматически заменены на один символ слеша и при выводе мы это и видим. Это называется экранированием, когда мы символы с двойным назначением записываем, добавляя перед ними обратный слеш. В данном случае получаем двойной слеш.
Часто такие символы следует прописывать при определении путей к файлам. Как мы знаем, в ОС Windows маршруты имеют вид:
Здесь фигурируют обратные слеши для разделения каталогов. Чтобы правильно описать такой путь, слеши следует экранировать:
path = "D:\\Python\\Projects\\stepik\\tex1.py"
видим, что маршрут определен верно. Если бы слеши не были экранированы, то получили бы неверный путь к файлу:
path = "D:\Python\Projects\stepik\tex1.py"
Вот этот момент следует хорошо запомнить.
Кроме обратного слеша экранировать также следует и кавычки. Например, мы хотим сформировать строку:
Внутри этой строки имеются кавычки. Но эти же самые кавычки определяют начало и конец строки в Python. Поэтому такая запись приведет к синтаксической ошибке. Чтобы все работало корректно, нужно выполнить экранирование кавычек:
Или, в данном случае, можно было бы использовать одинарные кавычки для определения строки, а внутри нее записать двойные:
Но на практике рекомендуется всегда выполнять экранирование таких символов, чтобы избежать случайных ошибок. Например, в этой строке уже нельзя просто так записать одинарные кавычки:
Снова получим синтаксическую ошибку, их нужно экранировать:
В завершение этого занятия отмечу, что в Python можно задавать, так называемые, сырые (row) строки. Это строки, в которых игнорируются спецпоследовательности и все символы воспринимаются буквально так, как записаны. Например, если взять строку с путем к файлу:
path = "D:\\Python\\Projects\\stepik\\tex1.py"
то сейчас, при отображении, мы видим по одному слешу:
Но, если определить эту же строку, как сырую, добавив букву r перед ней:
path = r"D:\\Python\\Projects\\stepik\\tex1.py"
то при печати увидим по два слеша, именно так, как прописали. Поэтому, в таких строках можно убрать спецопределения и записывать строку буквально так, как она должна выглядеть:
path = r"D:\Python\Projects\stepik\tex1.py"
На этом мы завершим наше очередное занятие по Python. Из него вы должны хорошо себе представлять, что такое спецсимволы и экранирование символов. Какие основные спецсимволы для строк существуют и как определяются сырые строки.
Видео по теме
#1. Первое знакомство с Python Установка на компьютер
#2. Варианты исполнения команд. Переходим в PyCharm
#3. Переменные, оператор присваивания, функции type и id
#4. Числовые типы, арифметические операции
#5. Математические функции и работа с модулем math
#6. Функции print() и input(). Преобразование строк в числа int() и float()
#7. Логический тип bool. Операторы сравнения и операторы and, or, not
#8. Введение в строки. Базовые операции над строками
#9. Знакомство с индексами и срезами строк
#11. Спецсимволы, экранирование символов, row-строки
#12. Форматирование строк: метод format и F-строки
#13. Списки — операторы и функции работы с ними
#14. Срезы списков и сравнение списков
#15. Основные методы списков
#16. Вложенные списки, многомерные списки
#17. Условный оператор if. Конструкция if-else
#18. Вложенные условия и множественный выбор. Конструкция if-elif-else
#19. Тернарный условный оператор. Вложенное тернарное условие
#21. Операторы циклов break, continue и else
#22. Оператор цикла for. Функция range()
#23. Примеры работы оператора цикла for. Функция enumerate()
#24. Итератор и итерируемые объекты. Функции iter() и next()
#25. Вложенные циклы. Примеры задач с вложенными циклами
#26. Треугольник Паскаля как пример работы вложенных циклов
#27. Генераторы списков (List comprehensions)
#28. Вложенные генераторы списков
#29. Введение в словари (dict). Базовые операции над словарями
#30. Методы словаря, перебор элементов словаря в цикле
#31. Кортежи (tuple) и их методы
#32. Множества (set) и их методы
#33. Операции над множествами, сравнение множеств
#34. Генераторы множеств и генераторы словарей
#35. Функции: первое знакомство, определение def и их вызов
#36. Оператор return в функциях. Функциональное программирование
#37. Алгоритм Евклида для нахождения НОД
#38. Именованные аргументы. Фактические и формальные параметры
#39. Функции с произвольным числом параметров *args и **kwargs
#40. Операторы * и ** для упаковки и распаковки коллекций
#42. Анонимные (lambda) функции
#43. Области видимости переменных. Ключевые слова global и nonlocal
#45. Введение в декораторы функций
#46. Декораторы с параметрами. Сохранение свойств декорируемых функций
#47. Импорт стандартных модулей. Команды import и from
#48. Импорт собственных модулей
#49. Установка сторонних модулей (pip install). Пакетная установка
#50. Пакеты (package) в Python. Вложенные пакеты
#51. Функция open. Чтение данных из файла
#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов
#53. Запись данных в файл в текстовом и бинарном режимах
#55. Функция-генератор. Оператор yield
#56. Функция map. Примеры ее использования
#57. Функция filter для отбора значений итерируемых объектов
#58. Функция zip. Примеры использования
#59. Сортировка с помощью метода sort и функции sorted
#60. Аргумент key для сортировки коллекций по ключу
#61. Функции isinstance и type для проверки типов данных
#62. Функции all и any. Примеры их использования
#63. Расширенное представление чисел. Системы счисления
#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы
#65. Модуль random стандартной библиотеки
#66. Аннотация базовыми типами
#67. Аннотации типов коллекций
#68. Аннотации типов на уровне классов
#69. Конструкция match/case. Первое знакомство
#70. Конструкция match/case с кортежами и списками
#71. Конструкция match/case со словарями и множествами
#72. Конструкция match/case. Примеры и особенности использования
© 2023 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта