Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

data:strings [2021/01/18 11:43]
127.0.0.1 внешнее изменение
data:strings [2023/02/02 22:22] (текущий)
root
Строка 150: Строка 150:
  
 </div> </div>
-<div slide> 
- 
-===== Формирование строк в стиле printf ===== 
- 
-У типа ''str'' предусмотрен оператор ''%'' который принимает вторым аргументом переменную или кортеж и подставляет их на указанное место в строке. 
- 
-<sxh python> 
-t = "привет %s : %.2f" 
-s = t % ("мир", 42) 
-# s == 'привет мир : 42.00' 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-==== Популярные форматы ==== 
- 
-^ Формат ^ Аргумент ^ Эффект ^ 
-| ''%s'' | ''str'' | Подстановка строки | 
-| ''%d'' | ''int'' | Подстановка целого числа | 
-| ''%f'' | ''float'' | Подстановка числа с плавающей точкой | 
-| ''%e'' | ''float'' | Экспоненциальный формат | 
-| ''%x'' | ''int'' | Подстановка числа в шестнадцатеричной системе | 
- 
-==== Популярные модификаторы ==== 
- 
-<sxh python> 
-"%6d" % 42 # '    42' 
-"%06d" % 42 # '000042' 
-"%.2f" % 3.14159   # '3.14' 
-"%06.2f" % 3.14159 # '003.14' 
-"%#6.2f" % 3.14159 # '  3.14' 
-"%+6.3f" % 3.14159 # '+3.142' 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-===== Формирование строк в стиле format ===== 
- 
-У типа ''str'' есть специальный метод ''format'': 
- 
-<sxh python> 
-s = 'Привет, {}!' 
-w = s.format('мир') 
-#w == 'Привет, мир!' 
-</sxh> 
- 
-Преимущества: 
-  * Автоматическое приведение типов 
-  * Возможность передачи параметров по имени и по номеру (в том числе повторение) 
- 
-Форматы аналогичны ''%'' но указываются после символа '':'' перед которым может стоять имя аргумента: 
- 
-<sxh python> 
-s = 'Power {power:.2f} State {state}' 
-w = s.format(state = "Ready", power = 3.14159) 
-#w == 'Power 3.14 State Ready' 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-===== Разбор строк ===== 
- 
-Базовые разбор строк часто можно выполнить комбинацией методов 'split', 'strip' и приведением полученных элементов строки к нужным типам. Но иногда этого бывает мало или получаемый код выходит слишком громоздким. 
- 
-==== scanf ==== 
- 
-Пакет ''scanf''<sup>[pip]</sup> предоставляет метод разбора строк аналогичный C функции ''scanf''. 
- 
-<sxh python> 
-from scanf import scanf 
- 
-template = 'Power: %f [%], %s, Stemp: %f' 
-text = 'Power:   0.0 [%], Cool, Stemp: 23.73' 
-s = scanf(template, text) 
-#s == (0.0, 'Cool', 23.73) 
-</sxh> 
- 
-Поддерживаемые модификаторы: ширина поля ''%12d'' и пропуск поля ''%*d''. 
- 
-Дополнительно имеется тип ''%c'' —  один или нескольких символов, например ''%12c'', а ''%s'' работает до первого пробела. 
- 
-Подробное описание форматов [[https://github.com/joshburnett/scanf|scanf]].  
- 
-</div> 
-<div slide> 
- 
-==== Регулярные выражения ==== 
- 
-Регулярные выражения — специальный язык программирования. В стандартной библиотеке Python есть модуль для работы с ними — ''re''. Перед использованием регулярные выражения следует компилировать методом ''re.compile'', это повышает производительность. 
- 
-Основные применения: 
- 
-  * Проверка формальной корректности строки 
-  * Поиск/замена по шаблону 
-  * Разделение строки по правилам 
- 
-Проверить свои регулярные выражения можно, например, на сайте [[http://www.pyregex.com/]]. 
- 
-Использование длинных и сложных регулярных выражений считается плохим стилем. Для разбора сложного синтаксиса следует использовать другие инструменты. 
- 
-</div> 
-<div slide> 
- 
-=== Некоторые популярные регулярные выражения === 
- 
-^ Выражение ^ Смысл ^ 
-| ''^'' | Начало строки | 
-| ''$'' | Конец строки | 
-| ''.'' | Один любой символ | 
-| ''[abcd]'' | Один из символов ''abcd'' | 
-| ''[a-z0-9A-Z]'' | Один из алфовитноцифровых символов | 
-| ''\w'' | Один символ из набора ''[a-zA-Z0-9_]'' + Unicode letters | 
-| ''\s'' | Один пробельный символ | 
-| ''( )'' | Группа из одного или нескольких шаблонов к которой можно обращаться | 
-| ''+'' | Модификатор "один или несколько" | 
-| ''*'' | Модификатор "ноль или несколько" | 
- 
-Чтобы избежать проблем с экранированием регулярные выражения записываются, как строки без экранирования, например ''r'\w+'''. 
- 
-</div> 
-<div slide> 
- 
-==== Некоторые методы ==== 
- 
-=== match === 
- 
-Проверка на соответствие строки — шаблону. 
- 
-<sxh python> 
-import re 
- 
-r = re.compile(r"\w+ = \w+") 
-r.match("Привет = мир") != None # True 
-r.match("Привет =") != None # False 
-r.match("Привет = мир проверка") != None # True 
- 
-r = re.compile(r"^\w+\s+=\s+\w+$") 
-r.match("Привет = мир проверка") != None # False 
-r.match("Привет = мир\n") != None # True 
- 
-r = re.compile(r"^(\w+)\s+=\s+(\w+)$") 
-wd = r.match("Привет = мир") 
-wd.group(0) # 'Привет = мир' 
-wd.group(1) # 'Привет' 
-wd.group(2) # 'мир' 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-=== search / findall === 
- 
-Поиск в строке подстрок(-и) удовлетворяющей выражению. 
- 
-<sxh python> 
-import re 
- 
-r = re.compile(r"[а-я]+") 
-wd = r.search("Если я чешу в затылке не беда!") 
-s = wd.group(0) # s == 'сли' 
- 
-t = r.findall("Если я чешу в затылке не беда!") 
-#t == ['сли', 'я', 'чешу', 'в', 'затылке', 'не', 'беда'] 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-=== sub === 
- 
-Замена подстрок(-и) удовлетворяющей выражению. 
- 
-<sxh python> 
-import re 
- 
-r = re.compile(r"\s+") 
-s = r.sub("-","begin      begin       begin   end    end   end") 
-# s == 'begin-begin-begin-end-end-end' 
-</sxh> 
- 
-</div> 
-<div slide> 
- 
-=== split === 
- 
-Разбиение строки по разделителю в виде регулярного выражения. 
- 
-<sxh python> 
-import re 
- 
-r = re.compile(r"\s+") 
-s = r.split("Если   я    чешу  в   затылке   не беда!") 
-# s == ['Если', 'я', 'чешу', 'в', 'затылке', 'не', 'беда!'] 
-</sxh> 
- 
-</div> 
-