Слайд 6Ключевые слова
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for',
'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Их нельзя использовать в качестве переменных
Также следует избегать переопределения встроенных идентификаторов вида help, str и подобных
Слайд 7Список встроенных идентификаторов
import builtins
dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError',
'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError',
'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
Слайд 15Примеры
bin(16) # 0b10000
oct(16) # 0o20
hex(16) # 0x10
int("2pt", 30) # 2579
(1024).to_bytes(2, byteorder="big") #
b'\x04\x00'
(1024).to_bytes(10, byteorder='big')
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
x = 1000
x.to_bytes((x.bit_length() //
8) + 1, byteorder="little")
# b'\xe8\x03'
int.from_bytes(b"\x00\x10", byteorder="big") # 16
int.from_bytes(b"\x00\x10", byteorder="little") # 4096
int.from_bytes(b"\xfc\x00", byteorder="big", signed=True) # –1024
int.from_bytes(b"\xfc\x00", byteorder="big", signed=False) # 64512
int.from_bytes([255, 0, 0], byteorder="big") #16711680
Слайд 17Преобразования типов
float.is_integer() – проверка
целое ли значение
int(98.8) # 98 – отбрасывается
дробная часть
int("98.8") # Ошибка!
float(98) # 98.0
float("98.8") # 98.8
s1 = float.is_integer(57.35)
# False
s2 = float.is_integer(57.000)# True
Слайд 18Присваивание переменных
х = 6 # Тип int
у = 6.8 #
Тип float
В Python возможно присваивать одно значение нескольким переменным сразу.
Например:
a = b = c = 1
В данном случае создается объект со значением 1, и все 3 переменные указывают на область в памяти, в которой он находится.
Групповое присваивание можно использовать для чисел, строк и кортежей, но для изменяемых объектов этого делать нельзя.
Слайд 19Позиционное присваивание
х, у, z = 1, 2, 3 # x=1,
y=2, z=3
С помощью позиционного присваивания можно поменять значения переменных местами
х,
у = у, х # x=2, y=1
(В других языках для такого обмена пришлось бы задействовать вспомогательную переменную)
Слайд 20Оператор is
При инициализации в переменной сохраняется ссылка на объект
Проверить, ссылаются
ли две переменные на один и тот же объект, позволяет
оператор is
В целях повышения эффективности кода интерпретатор производит кэширование малых целых чисел и небольших строк.
х = 2; у= 2; z = 2
print(x is y) # True
print(y is z) # True
Посмотреть количество ссылок на объект позволяет метод getrefcount() из модуля sys
Проверка на None производится тоже через is, а не через "="
print(x is None) # False
Слайд 21Тип complex
complex – комплексные числа
my_complex = complex(2, 3) # (2+3j)
my_complex
= 2+3j # (2+3j)
isinstance(my_complex, complex) # True
my_complex.real # 2.0
my_complex.imag #
3.0
my_complex.conjugate() # (2-3j) сопряжённое
isinstance(my_complex.real, float) # True
isinstance(my_complex.imag, float) # True
Слайд 22Unicode-cтpoки (str)
Набор символов между кавычками.
Можно использовать пары одинарных либо
двойных кавычек.
Плохой тон использовать оба типа кавычек в коде
Из
строк можно взять подстроку используя оператор нарезки ( [ ] и [ : ] ) с индексами от 0 для первого символа строки и до последнего.
Можно использовать и обратную индексацию от –1 для последнего символа до начала.
Строки относятся к категории неизменяемых последовательностей. Все операции с ними создают новые строки.
Слайд 23UTF-кодировка
Примечание: Тип UTF-8, UTF-16 или UTF-32 – здесь не указан.
Следует рассматривать такие строки, как строки в некой абстрактной кодировке,
позволяющие хранить символы Unicode и производить манипуляции с ними.
Слайд 24Окончание строк
В языке Python нулевой байт (символ null) не является
признаком завершения строки, как в языке C.
Интерпретатор сохраняет в
памяти как текст самой строки, так и ее длину.
Фактически в языке Python вообще нет символа, который служил бы признаком завершения строки.
Слайд 25Создание строк типа str
С помощью литералов
S = 'str' #str
S = "str" #str
S
= '''str''' #str
S = """str""" #str
Тройные кавычки не очень полезны для коротких
строк. Они обычно используются для того, чтобы создать многострочные строки.
с помощью функции str([<Объект>
[, <Кодировка> [, <Обработка ошибок>]]]) .
Если указан только первый параметр, то функция возвращает строковое представление любого объекта.
Если параметры не заданы, то возвращается пустая строка
Слайд 26Способы создания строк
Строка из последовательности байтов:
str(b"\xf1\xf2\xf0\xee\xea\xe0", "cp1251")
Выведет: 'строка'
Преобразование в строку
str(10)
# '10'
Кавычку внутри строки в кавычках и апостроф внутри строки
в апострофах необходимо экранировать с помощью защитного слеша
print("\"х\": 5", '\'х\': 5')
Выведет: ("х": 5 'х': 5)
S[0] = "z" # НЕЛЬЗЯ!
Слайд 27Операции со строками
Конкатенация (сцепление)
S1 = "раз"
S2 = "два"
print(S1
+ S2) # раздва
Два литерала автоматически сцепятся
('Кот' 'обус') # Котобус
Дублирование
строки
print("раз" * 3) # разразраз
Можно выполнять комплексно
S1 = "м" + S1[1:] # маз
Символы ASCII
Слайд 28Экранированные последовательности – служебные символы
Экранированные последовательности позволяют вставить символы, которые
сложно ввести с клавиатуры.
Слайд 30Подавление экранирования
Если перед открывающей кавычкой стоит символ "r" (от "raw"-сырой)
(в любом регистре), то механизм экранирования отключается.
S = r"C:\somefile.txt"
"сырая" строка
не может заканчиваться символом обратного слэша.
S = r"\n\n\" # приводит к ошибке!
Пути решения:
S = r"\n\n\\"[:-1] # минус последний слэш
S = r"\n\n" + "\\" # плюс один слэш
S = "\\n\\n\\" # нет сырой строки
На выходе получаем '\n\n\'
Слайд 31Операции над строками
S = "text"
len(S) # 4 – длина строки
Индексы
реализованы в виде смещений от начала и потому индексация начинается
с 0
Есть возможность индексации в обратном порядке, от конца к началу – положительные индексы откладываются от левого конца последовательности, а отрицательные – от правого.
S[2] # x
S[-2] # тот же самый x
S[len(S) – 2] # Это эквивалентно S[-2]
Слайд 32Срезы
В дополнение к индексированию по номеру позиции, последовательности поддерживают более
общую форму индексирования, известную как получение среза (slicing), которая обеспечивает
возможность извлечения за одну операцию целого сегмента (среза).
Синтаксис операции получения среза выглядит как: X[I:J], и означает: «извлечь из X все, начиная со смещения I и до смещения J, но не включая его».
Слайд 33Стандартные срезы
При выполнении среза левая граница по умолчанию принимается равной
нулю, а правая – длине последовательности, к которой применяется операция.
S
= "text"
S[1:] # ext – от 1-го до конца
S[0:3] # tex – от 0-го до 2-го
S[:3] # tex – от начала до 2-го
S[:-1] # tex – от начала до –1-го
S[:] # text – вся строка.
Можно задавать шаг среза
S = "0123456789ABCDEF"
S[:: –1] # FEDCBA9876543210 – обратный порядок
S[:1:-2] # FDB9753 – каждый 2-й символ в обратном порядке до 1-го (не включая)
S[2::2] # 2468ACE – каждый 2-й символ с 2-го
Слайд 34Примеры строк и их срезов
text = "0123456789ABCDEF"
text[0] # символ с
индексом 0 (0)
text[0:5] # подстрока от 0-го символа до 4-го
(01234)
text[4:10] # подстрока от 4-го символа до 9-го (456789)
text[0:16] # вся строка (0123456789ABCDEF)
text[:] # вся строка (0123456789ABCDEF)
text[7:] # подстрока с 7-го символа до конца (789ABCDEF)
text[:5] # строка с начала до 5 символа. Аналогично text[0:5] (01234)
text[-1] # последний символ (F)
text[-1:-14] # Не сработает, выведет пустую строку
text[::2] # Третий аргумент – шаг. Выведет каждый второй символ (02468ACE)
text[::-1] # Шаг отрицательный. Выведет строку наоборот (FEDCBA9876543210)
text + "GH" # Сцепит с новой строкой 0123456789ABCDEFGH
text[-1] * 10 # Выведет 10 символов (FFFFFFFFFF)
Слайд 35Методы для строк
print(dir(S)) даст нам список методов
[…, 'capitalize', 'casefold', 'center',
'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha',
'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
http://pythonz.net/references/named/str/
Слайд 36Описание основных методов строк
Поиск и замена
Слайд 38Модификации регистра
Модификации строк
Слайд 42Примеры
str1 = "Это пример строки"
str2 = "при"
print(str1.rindex(str2)) # 4
"a, b,
c".split(",") # ['a', ' b', ' c']
"a, b, c".split(",", maxsplit=1)
# ['a', ' b, c']
Разбиение по пробелам. Если 2 пробела
"a b c".split() # ['a', 'b', 'c']
"a b c".split(" ") # ['a', '', 'b', '', 'c']
Слайд 43Строковые константы
Модуль Python string содержит заранее определенные строковые константы
printable =
string.printable # 100 печатных символов:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;?@[\]^_`{|}~
Другие свойства:
[…, 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords',
'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
Слайд 44Старый стиль форматирования строк "%"
имеет форму строка % данные. Внутри
строки находятся интерполяционные последовательности.
Слайд 45Примеры форматирования "%"
"%s" % 42 # "42"
"%d" % 42 #
"42"
"%x" % 42 # "2a"
"%o" % 42 # "52"
"%s" % 7.03 #
"7.03"
"%f" % 7.03 # "7.030000"
"%e" % 7.03 # "7.030000e+00"
"%g" % 7.03 # "7.03"
"Эта %s из %d слов" % ("строка", 5)
# Эта строка из 5 слов
Слайд 46Кодирование. encode
Строка кодируется байтами. Первый аргумент строковой функции encode() –
это имя кодировки.
Слайд 47Примеры кодирования
snegovik = "\u2603" #☃
ds = snegovik.encode("utf-8") # UTF-8
len(ds) #
3 – заняло 3 байта
print(ds) # b'\xe2\x98\x83' – побайтно
# использование
аргумента "ignore" позволяет избежать ошибок перекодирования
snegovik.encode("ascii", "ignore")
Слайд 48Декодирование decode
Это декодирование байтовых строк в строки Unicode.
Однако, при
получении текста из внешнего источника (файлы, базы данных, сайты, сетевые
API и т. д.), он закодирован в виде байтовой строки.
Идея заключается в том, чтобы знать, какая кодировка была использована, чтобы стало возможным ее декодировать и получить строку Unicode.
Проблема в том, что никакая часть байтовой строки не говорит о том, какая была использована кодировка.
Слайд 49Примеры кодирования/декодирования
place = "caf\u00e9" # café
place_bytes = place.encode("utf-8") # b'caf\xc3\xa9'
Первые
три символа похожи на ASCII (преимущество UTF-8), а последние два
кодируют символ «é»
readtext = place_bytes.decode("utf-8")
# café
Слайд 50Форматирование строк format
S.format(*args, **kwargs) – Метод возвращает копию строки, в
которой маркеры заменены текстовыми значениями из соответствующих аргументов.
args: Позиционные аргументы.
kwargs:
Именованные аргументы.
Строка, для которой вызывается данный метод может содержать обычный текст и маркеры в фигурных скобках {}, которые следует заменить. Текст вне скобок будет выведен без изменений.
Слайд 51Маркеры
Общий вид маркера: '{'[наименование('.'аттр|'['индекс']')*] ['!'приведение] [':'формат] '}'
Если требуется, чтобы результирующая
строка содержала скобку, то этот спецсимвол можно экранировать при помощи
его удвоения: {{ и }}.
Наименование состоит из имени аргумента (либо его индекса). Числовой индекс при этом указывает на позиционный аргумент; имя же указывает на именованный аргумент.
Если используются числа и они составляют последовательность (0, 1, 2...), то они могут быть опущены разом (но не выборочно). Например, {}-{}-{} и {0}-{1}-{2} эквивалентны.
Слайд 52Примеры форматирования
'{}-{}-{}'.format(1, 2, 3) # '1-2-3'
'{}-{}-{}'.format(*[1, 2, 3]) # '1-2-3'
'{one}-{two}-{three}'.format(two=2,
one=1, three=3) # '1-2-3'
'{one}-{two}-{three}'.format(**{'two': 2,
'one': 1, 'three': 3}) #
'1-2-3'
'{0}, {1}, {2}'.format('a', 'b', 'c') # 'a, b, c'
'{2}, {1}, {0}'.format('a', 'b', 'c') # 'c, b, a'
'{2}, {1}, {0}'.format(*'abc') # распаковывая последовательность аргументов 'c, b, a' '{0}{1}{0}'.format('abra', 'cad') # Индексы аргументов можно повторять 'abracadabra'
Слайд 53Мини-язык форматирования
Мини-язык применяется при форматировании строк и позволяет управлять представлением
значений.
Инструкции (спецификации) мини-языка могут передаваться напрямую встроенной функции format().
Слайд 54Общий вид инструкций формата
format_spec ::= [[fill]align][sign][#][0][width][grouping_option]
[.precision][type]
fill ::=
align ::= "" | "=" | "^"
sign
::= "+" | "-" | " "
width ::= integer
grouping_option ::= "_" | ","
precision ::= integer
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
https://docs.python.org/3/library/string.html#formatspec
Слайд 56Равнение
Равнение будет действовать только, если указан минразмер и длина подставляемого
значения меньше него.
Минразмер – это целое, задающее минимальную длину значения.
Если не указывается, то будет использована длина самого значения.
Слайд 57Примеры равнения
"*" – используется в качестве заполнителя
Имеет смысл только при
указанной длине строки (8)
"{:*
действует, т.к. нет длины
"{:*>8}".format("text") # "****text"
"{:*^8}".format("text") # "**text**"
"{:*=8}".format(-5) # "-******5"
Слайд 58Знак
Знак используется только для числовых типов:
Слайд 59Примеры знака
"{:+}".format(3) # "+3"
"{:+}".format(-3) # "-3"
"{:-}".format(3) # "3"
"{:-}".format(-3) # "-3"
"{:
}".format(3) # " 3"
"{: }".format(-3) # "-3"
Слайд 60Запятая
[,] – использовать запятую в качестве тысячного разделителя. Чтобы использовать
разделитель, заданный локалью, используйте тип преобразования целых n
"{:}".format(1000000) # "1000000"
"{:,}".format(1000000)
# "1,000,000"
Слайд 610 – Если не задано равнение, то ноль перед минразмер
включает добавление перед числом нулей, зависящее от его знака.
"{:04}".format(1)
# '0001'
"{:04}".format(-1) # '-001'
# То же самое с использованием равнения:
"{:0=4}".format(1) # '0001'
"{:0=4}".format(-1) # '-001'
Ноль
Слайд 64Альтернативные форматы чисел
# – использовать альтернативную форму представления.
Разные типы
предлагают разные альтернативные формы. Опция доступна для целых чисел, чисел
с плавающей запятой, комплексных и десятичных чисел.
Для целых, когда используются двоичная восьмеричная и шестнадцатеричная формы, опция добавляет префиксы 0b, 0o и 0x соответственно.
Для чисел с плавающей запятой, комплексных и десятичных альтернативная форма подразумевает наличие точки (разделителя), даже если за ней не следуют цифры. В обычной форме разделитель ставится, только если за ним следует цифра.
Для преобразований типа g и G нули в конце числа не отсекаются.
Слайд 65Примеры
"{:b}".format(70) # "1000110"
"{:#b}".format(70) # "0b1000110"
"{:x}".format(95)
# 5f
"{:#X}".format(95) # "0x5F"
"{:o}".format(70) # "106"
"{:#o}".format(70)
# "0o106"
"{:f}".format(6) # "6.000000"
"{:.2f}".format(6) # "6.00"
"{:.2%}".format(6) # "600.00%"
"{:.2s}".format("text") # "te"
Слайд 66Более сложные конструкции
Задаём словарь d:
d = {"n": 42, "f": 7.03,
"s": "строка"}
"{0[n]} {0[f]} {0[s]} {1}".format(d, "конец")
# "42 7.03 строка конец"
#
0 – относится к d, 1 – к строке "конец"
# n, f, s – ключи словаря
С именованными параметрами не из словаря:
"{n:d} {f:f} {s:s}".format(n=42, f=7.03, s="строка")
# "42 7.030000 строка
# для f точность по умолчанию – 6 знаков
Минимальная длина поля – 10, выравнивание по левому краю:
print("{0:<10d} {1:<10f} {2:<10s}".format(42, 7.05, "txt")) # 42 7.050000 txt
Слайд 67…продолжение
1 аргумент: центральное выравнивание – 10 знаков целого числа
2 аргумент:
правое выравнивание, 10 знаков и точность 4 знака для 2
числа
3 аргумент – ширина 10 знаков
"{0:^10d} {1:>10.4f} {2:10.4s}".format(42, 7.05, "txt") # 42 7.0500 txt
Слайд 68Прочие опции форматирования
В данном курсе не рассматриваются "Шаблонные строки" (из
стандартной библиотеки Template Strings), а также, появившаяся начиная с версии
Python 3.6 "Интерполяция строк" (или f-Строки) Подробнее см. https://docs.python.org/3.7/library/string.html.
Примеры f-строк см. https://docs.python.org/3/reference/lexical_analysis.html
Слайд 69Регулярные выражения (РВ)
С помощью РВ можно задавать вопросы, вида «Соответствует
ли эта строка шаблону?», или «Совпадает ли шаблон где-нибудь с
этой строкой?».
Можно использовать регулярные выражения, для изменения строки или её разбиения на части различными способами.
РВ поставляются в стандартном модуле re.
См. https://habrahabr.ru/post/115825/
https://habrahabr.ru/post/115436/
https://docs.python.org/3/library/re.html#re.sub
Слайд 70Примеры РВ
Пример использования выглядит так:
result = re.match("Вар", "Вареник")
"Вар" – шаблон
"Вареник"
– источник
Для более сложных проверок выполняется компиляция
yourpattern = re.compile("Вар") #
компиляция
result = yourpattern.match("Вареник") # проверка
print(result.group(0)) # Вар
Слайд 71Методы модуля re
dir(re)
['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE',
'M', 'MULTILINE', 'RegexFlag', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE',
'X', '_MAXCACHE', …, 'compile', 'copyreg', 'enum', 'error', 'escape', 'findall', 'finditer', 'fullmatch', 'functools', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'template']
Подробнее можно найти в оригинальной документации:
https://docs.python.org/3/library/re.html
Слайд 72Функции сравнения
re.match(pattern, string) – ищет по заданному шаблону pattern в
начале строки string
re.start(), re.end() – возвращают начальную и конечную позиции
найденной подстроки
search(pattern, string) – возвращает первое совпадение, если таковое имеется во всей строке, а не только в начале, как match.
findall(pattern, string) – возвращает список всех непересекающихся совпадений, если имеются.
split(pattern, string, [maxsplit=0]) – разбивает источник на совпадения с шаблоном и возвращает список всех фрагментов строки.
sub(pattern, repl, string, count, flags) – принимает аргумент repl для замены и заменяет все части источника, string совпавшие с шаблоном, на его значение.
Слайд 73Примеры
result = re.match("Вар", "Вареник")
print(result.group(0)) # Результат ("Вар")
print(result.start()) # Начало (0)
print(result.end()) #
Конец (3)
result = re.findall("Вар", "ВарВар")
print(result) # ['Вар', 'Вар']
result = re.split(",","my,
long, tx")
print(result) # ['my', ' long', ' tx']
# Замена " and "на " & " ("\s" = пробел)
result = re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
print(result) # Baked Beans & Spam
Слайд 77Примеры
ca*t сработает для сt, cat, caat, ca…at
a[bcd]*e = "a" +
X + "e"
X – один из символов b, c, d
или его отсутствие
Сработает для ae, abe, abbbbe, adde, accce
Не сработает для axe
Если строка не соответствует шаблону, то match и search вернут None
Форма проверки соответствия выражения шаблону:
p = re.compile("a[bcd]*e")
m = p.match( "abbe" )
if m:
print("Соответствие: ", m.group())
else:
print("Нет соответствия")
Слайд 78Пример
^\d{6}$ – проверка правильности почтового индекса
^ – начало строки
\d –
цифра (6 штук)
$ – конец строки
p = re.compile("^\d{6}$")
m = p.match("123456")
if
m:
print("Соответствие: ", m.group())
else:
print("Нет соответствия")
>>> Соответствие: 123456
Проверить регулярные выражения можно онлайн на сайте https://regex101.com/
Слайд 79Флаг VERBOSE
позволяет форматировать регулярное выражение более ясным образом.
Пробелы в РВ,
которые не находятся внутри класса символов игнорируются.
Можно помещать внутрь
РВ комментарии, длящиеся с символа # до следующей строки.
pat = re.compile(r"""
\s* # Пропуск начального пробела
(?P[^:]+) # Имя заголовка
\s* : # Пробел и двоеточие
…
""", re.VERBOSE)