Книга «Python с нуля»

image Привет, Хаброжители!

Эта книга даст вам основные знания и инструменты, которые помогут стать опытным разработчиком на Python.

Эта книга приглашает вас в путешествие по огромному миру Python и охватывает все — от самых основ до более продвинутых тем, таких как наука о данных, веб-скрапинг и программирование графических интерфейсов. Каждая глава снабжена примерами, заданиями для самопроверки и лучшими практиками, чтобы вы не только поняли материал, но и получили практический опыт его применения. Неважно, новичок вы или опытный разработчик, желающий расширить свои навыки, — в этой книге найдется что-то для всех.

В первых главах вы узнаете об истории Python, настройке среды разработки и о том, как написать свою первую программу. Затем погрузитесь в основные понятия Python: переменные, типы данных, управляющие структуры, функции и модули. Вы изучите мощные возможности встроенных структур данных Python — списков, кортежей и словарей.

По мере приобретения навыков работы с Python вы познакомитесь с более продвинутыми темами, включая объектно-ориентированное программирование, обработку исключений и регулярные выражения. Узнаете, как работать с библиотеками и API, что позволит еще больше расширить функциональность Python.

Отладка и тестирование — важнейшие аспекты любого процесса разработки программного обеспечения. Вы узнаете, как использовать популярные инструменты и фреймворки, например Pytest, для тестирования кода на Python, а также как обеспечить надежность и сопровождаемость кода.

В последних главах мы углубимся в специализированные темы: науку о данных, веб-скрапинг и программирование графических интерфейсов. Вы изучите наиболее популярные библиотеки: NumPy, Pandas, Matplotlib, Scikit-learn и Tkinter. К концу книги у вас будет прочная основа понимания Python, а также уверенность в применении полученных навыков в различных сценариях реального мира.

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ


Регулярные выражения (regex) — это мощный инструмент для работы с текстом в Python. Регулярные выражения — это специфический язык, который используется для определения шаблонов поиска. Они широко используются для проверки данных, поиска и замены текста, а также для веб-скрапинга.

Регулярные выражения — это серия символов, определяющих шаблон для поиска. Например, выражение [0–9]+ соответствует любой последовательности из одной или нескольких цифр. Выражение \w+ соответствует любой последовательности из одного или более символов слова, которое включает буквы, цифры и знаки подчеркивания.

Python предоставляет модуль re для работы с регулярными выражениями. Он содержит функции и классы для работы с регулярными выражениями, включая функции для поиска, замены и разбиения текста.

Регулярные выражения можно использовать для поиска шаблонов в строках с помощью функций re.search (), re.match () и re.findall (). Они возвращают объект match, который содержит информацию о совпадении шаблона, например, совпавший текст и положение совпадения в строке.

Помимо простых шаблонов, регулярные выражения могут включать специальные символы, имеющие особые значения. Например, символ точки. соответствует любому символу, кроме новой строки, а символ каретки ^ соответствует началу строки.

Регулярные выражения могут включать классы символов, которые определяют наборы символов для сопоставления. Например, класс символов [aeiou] соответствует любой гласной букве, а класс символов [a-z] — любой строчной букве.

Регулярные выражения могут быть сложными и трудными в понимании, но это важный инструмент для работы с текстом в Python. Изучение регулярных выражений обязательно для любого программиста.

Сопоставление текста с помощью регулярных выражений


Регулярные выражения используются для сопоставления текстовых шаблонов. Вы можете использовать их для поиска, замены и парсинга текста.

Для работы с регулярными выражениями в Python используется модуль re. Наиболее часто используемой функцией re является search (), которая ищет шаблон в строке и возвращает первое совпадение. Пример:

import re
pattern = r "Python"

text = "Peter Severa loves programming in Python!"
match = re.search(pattern, text)

if match:
     print("Found a match!")
else:
     print("No match")
# prints "Found a match!"


Мы определяем шаблон, который хотим найти в строке. Затем вызываем функцию search () из модуля re, передавая шаблон и строку, которую хотим найти. Если шаблон найден, функция возвращает объект match, который можно использовать для получения дополнительной информации о совпадении.

Как вы уже знаете, регулярные выражения могут содержать специальные символы, имеющие особые значения. Часто используемые: точка (.) соответствует любому символу, кроме символа новой строки, символ каретки (^) соответствует началу строки, знак доллара ($) — концу строки.

Регулярные выражения также поддерживают квантификаторы, которые указывают, сколько раз должен совпасть шаблон. Вот некоторые распространенные квантификаторы:

  • ? — совпадает с одним вхождением предшествующего шаблона или не совпадает ни с одним;
  • {m} — совпадает ровно с m вхождениями предыдущего шаблона;
  • {m, n} — совпадения между m и n вхождениями предыдущего шаблона.

Важно тщательно тестировать регулярные выражения, чтобы убедиться, что они соответствуют нужным шаблонам и не содержат нежелательных.

Специальные символы и экранирование


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

  • \d соответствует любой цифре;
  • \D соответствует любому нецифровому символу;
  • \s соответствует любому пробельному символу;
  • \S соответствует любому символу, не являющемуся пробелом;
  • \w соответствует любому буквенному или цифровому символу, а также символу подчеркивания;
  • \W соответствует символу, не являющемуся буквенным, цифровым или символом подчеркивания.

Вы также можете использовать классы символов для поиска определенных групп символов.

Классы символов и выражения в квадратных скобках


Классы символов, также известные как наборы символов, или диапазоны символов, используются для поиска любого символа из набора символов. Это достигается путем помещения набора символов в квадратные скобки [ ].

Например, регулярное выражение [abc] соответствует любому из символов a, b или c. Аналогично, выражение [0123456789] соответствует любой из цифр от 0 до 9.

Классы символов можно также использовать для сопоставления с любым символом, которого нет в наборе символов. Для этого используется символ каретки (^) в качестве первого символа внутри квадратных скобок.

Например, выражение [^abc] соответствует любому символу, который не является a, b или c. Аналогично, выражение [^0123456789] соответствует любому символу, который не является цифрой.

Классы символов можно также использовать для сопоставления диапазонов символов. Для этого нужно указать первый и последний символы в диапазоне, разделенные дефисом (-) внутри квадратных скобок.

Например, выражение [a-z] соответствует любой строчной букве от a до z, а выражение [A-Z] соответствует любой заглавной букве от A до Z. Регулярное выражение [0–9] соответствует любой цифре от 0 до 9.

Основные классы символов


Вот несколько часто используемых классов символов:

  • [0–9] соответствует любой одной цифре;
  • [a-z] соответствует любой строчной букве;
  • [A-Z] соответствует любой прописной букве;
  • [a-zA-Z] соответствует любой букве, как прописной, так и строчной;
  • [aeiou] соответствует любой гласной.

Классы символов можно также комбинировать с помощью символа (|) для соответствия любому из набора классов символов. Например, выражение [0–9]|[a-z] будет соответствовать любой одной цифре или строчной букве.

Обратите внимание, что важен порядок символов в диапазоне. Например, [a-z] соответствует любой строчной букве от a до z, а вот [z-a] не является допустимым диапазоном.

Сокращенные классы символов


Сокращенные классы символов — это удобный способ представления общих классов символов с помощью сокращенного синтаксиса. Они используются для сопоставления цифр, букв и пробелов.

Вот некоторые наиболее часто используемые:

  • \d соответствует любой десятичной цифре (0–9);
  • \D соответствует любому нецифровому символу;
  • \w соответствует любому буквенно-цифровому символу (a–z, A–Z, 0–9 и подчеркивание);
  • \W соответствует любому символу, не являющемуся буквенным или цифровым;
  • \s соответствует любому символу пробела (пробел, табуляция, новая строка и т. д.);
  • \S соответствует любому символу, не являющемуся пробелом.

Например, для поиска строки, которая начинается с цифры и за которой следуют две буквы, можно использовать шаблон \d\w\w. Он соответствует любой цифре, за которой следуют два буквенно-цифровых символа.

Вы также можете использовать отрицание с сокращенными классами символов для определения того, что не входит в указанный класс. Например, для поиска строки, начинающейся с нецифрового символа, можно использовать выражение ^\D.

Вложенные классы символов


Вложенные классы символов — это классы символов, которые определены внутри другого класса символов. Они полезны для сопоставления символов, принадлежащих к нескольким категориям или диапазонам.

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

[a-z\d]

Здесь внешний класс символов [ ] соответствует любому символу, который является либо строчной буквой, либо цифрой. Внутренний класс символов \d соответствует любой цифре.
Вы также можете использовать отрицание с вложенными классами символов для указания любого символа, который не входит в определенную категорию или диапазон. Например, чтобы найти символ, который не является строчной буквой или цифрой, используйте следующий вложенный класс символов:

[^a-z\d]

Здесь внешний класс символов [ ] соответствует любому символу, который не является ни строчной буквой, ни цифрой. Внутренний класс символов a-z соответствует любой строчной букве, а символ отрицания ^ отрицает соответствие любому символу, который не является строчной буквой.

Квантификаторы и альтернация
В регулярных выражениях квантификаторы и альтернация используются для указания количества вхождений шаблона и для сопоставления с одним из нескольких шаблонов соответственно.
Квантификаторы позволяют указать, сколько раз шаблон должен встречаться во входной строке. Например, квантификатор + означает «одно или несколько вхождений». Таким образом, регулярное выражение a+ будет соответствовать одному или нескольким символам a во входной строке. Вот некоторые из часто используемых квантификаторов:

  • * совпадает с одним или несколькими вхождениями предыдущего шаблона или не совпадает ни с одним;
  • + совпадает с одним или несколькими вхождениями предыдущего шаблона;
  • ? соответствует одному вхождению предыдущего шаблона или не соответствует ни одному;
  • {n} совпадает ровно с n вхождениями предыдущего шаблона;
  • {m, n} соответствует от m до n (включительно) вхождениям предыдущего шаблона.

Альтернация позволяет сопоставить один из нескольких шаблонов. Например, выражение cat|dog будет соответствовать либо cat, либо dog во входной строке. Символ | используется для разделения шаблонов в альтернации. Вы можете использовать круглые скобки, чтобы сгруппировать шаблоны и применить альтернацию к более крупному шаблону.

Например, выражение (cat|dog)food будет соответствовать либо catfood, либо dogfood во входной строке.

Квантификаторы и альтернацию можно использовать вместе для создания более сложных регулярных выражений. Например, регулярное выражение a{2,3}|b{3} будет соответствовать либо aa, либо aaa, либо bbb во входной строке.

Квантификатор *


Квантификатор звездочка (*) используется для соответствия нулю или более вхождений предыдущего символа или группы. Например, выражение a* соответствует нулю или более вхождений символа a.

Вот несколько примеров использования квантификатора *:

  • ab*c соответствует ac, abc, abbc, abbbc и т. д.;
  • a.*b соответствует ab, aXb, aXYb и т. д., где X и Y могут быть любыми символами;
  • a.*? b является нежадной версией предыдущего примера и соответствует ab, aXb, aXYb и т. д., но останавливается на первом вхождении b.

Важно отметить, что квантификатор * по умолчанию жадный, то есть он будет соответствовать максимальному количеству вхождений. Однако вы можете использовать нежадную версию (.*?), чтобы найти как можно меньше вхождений.

Квантификатор +


Квантификатор + соответствует одному или нескольким вхождениям предыдущего символа или группы. Он похож на квантификатор *, но для его использования требуется хотя бы одно вхождение символа или группы.

Например, регулярное выражение a+ соответствует одному или нескольким вхождениям буквы a. Оно будет соответствовать строкам a, aa, aaa и т. д., но не будет соответствовать пустой строке.

Пример:

import re

string = "Число 333"
pattern = "\d+"

result = re.search(pattern, string)
if result:
    print(result.group()) # вывод: 333


Регулярное выражение \d+ соответствует одной или нескольким цифрам в строке. Функция поиска возвращает первое совпадение, которым является число 333. Квантификатор + гарантирует, что в совпадении есть хотя бы одна цифра.

Квантификатор ?


Квантификатор? указывает на то, что предыдущий символ или группа необязательны. Он соответствует либо нулю, либо одному вхождению предыдущего символа или группы.
Примеры:

  • ab? соответствует либо a, либо ab;
  • colou? r соответствует как color, так и colour;
  • https? соответствует как http, так и https.

Квантификатор? можно также использовать для того, чтобы сделать другие квантификаторы ленивыми, а не жадными. Это означает, что они будут сопоставлять как можно меньше, а не как можно больше символов.
Например, регулярное выражение a+? сопоставляет один или несколько символов, но лишь столько, сколько необходимо для поиска совпадения. Напротив, регулярное выражение a+ является жадным и соответствует максимально возможному количеству символов.
Несколько примеров использования ленивого квантификатора ?:

  • a+? соответствует одному или нескольким символам a, но только в том количестве, которое необходимо для нахождения совпадения;
  • a*? b соответствует наименьшей возможной строке, которая начинается с нуля или более символов a и заканчивается символом b;
  • a? либо соответствует одному символу a, либо не соответствует ни одному.

Квантификатор { }


Как вы уже знаете, квантификатор { } позволяет указать точное число или диапазон раз, когда предыдущий символ или группа должны появиться в шаблоне. Синтаксис этого квантификатора:

  • {m}
  • {m, n}
  • {m,}

где m — минимальное количество вхождений, n — максимальное количество вхождений, а вторая и третья формы необязательны. Вот несколько примеров:

  • {3} соответствует ровно трем вхождениям предыдущего символа или группы;
  • {1,3} соответствует 1–3 вхождениям предыдущего символа или группы;
  • {0,} соответствует нескольким вхождениям предыдущего символа или группы либо не соответствует ни одному.

Другой пример: шаблон a{3} будет соответствовать строке aaa, но не aa или aaaa. Шаблон a{1,3} будет соответствовать строкам a, aa или aaa, но не aaaa.

Можно использовать фигурные скобки с классами символов, группами и альтернациями, чтобы указать количество вхождений любой комбинации символов или групп. Например, шаблон (abc){2,4} будет соответствовать abcabc, abcabcabc или abcabcabcabc, но не abc или abcabcabcabcabc (5 раз abc).

Вы также можете использовать фигурные скобки с метасимволом точки, чтобы сопоставить любой символ определенное количество раз. Например, шаблон .{3} будет соответствовать любым трем символам в строке, а шаблон .{2,4} будет соответствовать любым 2–4 символам в строке.

Квантификатор { } может быть полезен для сопоставления шаблонов с определенными требованиями к длине, например паролей или номеров кредитных карт с фиксированной длиной.

Альтернация и |


Альтернация — это способ указать набор альтернатив в регулярном выражении, что позволяет подобрать один из нескольких возможных шаблонов.

Символ вертикальной черты (|) используется для обозначения альтернации. Например, регулярное выражение cat|dog соответствует либо cat, либо dog. В этом случае символ | разделяет две альтернативы.

Альтернацию можно использовать с любым из квантификаторов, которые мы уже рассмотрели. Например, выражение (cat|dog)+ соответствует одному или нескольким вхождениям либо cat, либо dog.

Обратите внимание, что при использовании альтернации механизм регулярных выражений будет пытаться сопоставить альтернативы в указанном порядке. Если совпадение найдено, механизм не будет пытаться найти совпадения с оставшимися альтернативами.
Пример использования альтернации:

import re
pattern = 'mother|father'
text = 'I am with my mother and father'
match = re.search(pattern, text)
if match:
print('Match found:', match.group())
else:
print('No match')


Мы определяем шаблон регулярного выражения, который соответствует либо mother, либо father. Затем ищем этот шаблон в строке 'I am with my mother and father'. Поскольку эта строка содержит и mother, и father, функция поиска найдет совпадение. Вывод программы будет следующим:

Match found: mother


Обратите внимание, что, несмотря на то что строка содержит и mother, и father, функция поиска находит только первое совпадение. Это происходит потому, что механизм регулярных выражений прекращает поиск альтернатив, как только найдено совпадение.

Квантификаторы и альтернация: лучшие практики и советы


Квантификаторы и альтернация — мощные возможности регулярных выражений, которые при этом могут стать источником путаницы и ошибок при неправильном использовании. Вот несколько советов.

1.Используйте квантификаторы экономно: хотя квантификаторы могут сделать регулярные выражения более мощными и лаконичными, они могут их и затруднить. Старайтесь использовать квантификаторы только в случае необходимости и не злоупотребляйте ими.

2.Будьте внимательны в отношении жадных и нежадных квантификаторов: жадные квантификаторы (*, +, {m, n}) сопоставляют максимальное количество символов, в то время как нежадные (*?, +?, {m, n}?) — минимальное. Убедитесь, что вы понимаете разницу и выбираете подходящий квантификатор для ваших нужд.

3.Рассмотрите возможность использования классов символов вместо альтернации: если нужно подобрать один из нескольких определенных символов, вместо альтернации используйте класс символов. Например, вместо (apple|orange|banana) можно использовать [aob]pple.

4.Тщательно тестируйте регулярные выражения: они могут быть сложными и трудными для отладки, поэтому важно тщательно тестировать их, чтобы убедиться, что они соответствуют предполагаемому вводу. Рассмотрите возможность использования онлайн-инструментов или программных библиотек, которые помогут протестировать и проверить регулярные выражения.

5.Документируйте свои регулярные выражения: другие разработчики могут их не понять, особенно там, где используется неочевидный синтаксис. Документируйте, чтобы облегчить чтение и понимание своих регулярных выражений другими, а также чтобы самим запомнить их назначение и функциональность.

Группировка и захват


В регулярных выражениях группировка и захват позволяют выделять и извлекать конкретные части совпадения. Это достигается путем использования скобок для объединения частей регулярного выражения вместе и захвата текста, соответствующего этой группе.

Группировка полезна в ситуациях, когда вы хотите применить квантификатор к определенной части регулярного выражения. Например, если нужно найти любое слово, которое начинается с «cat» и заканчивается «s», можно использовать регулярное выражение »\bcat\w*s\b». Но если вы хотите найти только слово между «cat» и «s», то используйте группировку, чтобы изолировать эту часть соответствия.

Захват — это процесс извлечения текста, совпадающего с группой, и его последующего использования в регулярном выражении или коде. Для этого группе присваивается имя или номер, на который затем можно ссылаться с помощью обратных ссылок.

Группировка и захват могут использоваться в различных ситуациях, например для извлечения определенной информации из файла журнала или парсинга структурированных данных из текстового файла. Используя регулярные выражения для группировки и захвата частей совпадения, вы сможете быстро и эффективно извлекать нужную информацию из большого объема текста.

Использование круглых скобок для группировки


Использование скобок в регулярных выражениях позволяет объединять несколько символов или подвыражений, чтобы применить к ним квантификаторы или альтернацию. Эти группы также могут быть использованы для захвата совпавшего текста для последующего использования.
Например, рассмотрим регулярное выражение (ab)+. Это выражение соответствует одному или нескольким вхождениям последовательности символов «ab». Круглые скобки группируют «ab» вместе, так что квантификатор + применяется к обоим символам, обеспечивая повторение всей последовательности.

Вот еще один пример: ([a-z]+) (\d+). Это выражение соответствует последовательности из одной или нескольких строчных букв, за которыми следует пробел, а затем одна или несколько цифр. Два набора круглых скобок создают две отдельные группы захвата, одна для букв, другая для цифр. На эти группы можно ссылаться в дальнейшем, используя специальные обозначения, как мы увидим в следующем подразделе.

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

Захват совпадений с помощью групп


Захват совпадений с помощью групп — это мощная функция регулярных выражений, которая позволяет извлекать определенные части совпавшей строки. Для захвата совпадения используются скобки, чтобы сгруппировать часть шаблона, которую вы хотите захватить.
Предположим, есть строка, содержащая адреса электронной почты, и вы хотите извлечь имя пользователя и домен для каждого адреса. Для выделения этих частей адреса почты можно использовать группы.

Пример:

import re

text = "john.doe@severadao.ai, jane.doe@severadao.ai"

pattern = r"(\w+)\.(\w+)@(\w+\.\w+)"

matches = re.findall(pattern, text)

for match in matches:
     username = match[0] + "." + match[1]
     domain = match[2]
     print("Username:", username)
     print("Domain:", domain)


В этом примере выражение (\w+)\.(\w+)@(\w+\.\w+) используется для поиска адресов электронной почты:

  • (\w+) соответствует одному или нескольким символам слова (буквы, цифры или знаки подчеркивания);
  • \. соответствует символу точки;
  • (\w+) соответствует одному или нескольким символам слова;
  • @ соответствует символу @;
  • (\w+\.\w+) соответствует одному или нескольким буквенно-цифровым символам, за которыми следует точка, а затем снова один или несколько буквенно-цифровых символов.

Функция re.findall () возвращает список кортежей, где каждый кортеж содержит захваченные группы для каждого совпадения. Затем используется цикл для извлечения имени пользователя и домена из каждого совпадения, а затем происходит вывод.

Обратите внимание, что можно ссылаться на захваченные группы по их индексу, используя обратные слеши, за которыми следует номер группы. Например, имя пользователя можно извлечь, используя match[\1] вместо match[0] + ».». + match[1].

Группы без захвата


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

Группы без захвата обозначаются синтаксисом (?: pattern), где pattern — шаблон регулярного выражения, который нужно сгруппировать. Последовательность ?: после открывающей круглой скобки указывает механизму регулярных выражений рассматривать группу как не захватывающую.

Допустим, что у нас есть строка телефонных номеров в формате (987) 123–7654 и нужно извлечь только код города. Можно использовать группу без захвата, чтобы сгруппировать первые три цифры вместе, не захватывая их:

import re

text = "(987) 123-7654"
pattern = r"\((?:\d{3})\)\s\d{3}-\d{4}"

match = re.search(pattern, text)
print(match.group(1))


Шаблон \((?:\d{3})\)\s\d{3}-\d{4} соответствует номеру телефона в формате (123) 456–7890. Группа без захвата (?:\d{3}) совпадает с тремя цифрами (код города), но не захватывает совпадение. Последовательности \(и \) соответствуют открывающим и закрывающим скобкам, а последовательность \s соответствует пробелу.

Оператор match.group (1) извлекает первую группу в совпадении, которая соответствует коду области, совпадающему с не захваченной группой.

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

import re

text = "3,5,6"
pattern = r"\d+(?:,\d+)*"
match = re.search(pattern, text)

if match:
     print("Match found")
else:
     print("No match found ")


В этом примере шаблон \d+(?:,\d+)* соответствует одной или более цифр, за которыми следует ноль или более разделенных запятой цифр. Группа без захвата (?:,\d+)* соответствует нулю или более вхождениям запятой, за которыми следует одна или более цифр, но не захватывает каждое отдельное совпадение.

Функция re.search возвращает объект match, если совпадение найдено, или None в противном случае. В нашем случае совпадение найдено, программа выводит Match found. В противном случае выводится No match found.

Именованные группы


Именованные группы в регулярных выражениях позволяют ссылаться на найденные соответствия по имени, а не по их числовому индексу. Это делает код более читабельным и простым в сопровождении.

Чтобы создать именованную группу, используйте синтаксис (? Ppattern). name — имя группы, а pattern — это шаблон регулярного выражения. Например:

import re

text = "My name is Peter"
pattern = r"My name is (?P\w+)\."

match = re.search(pattern, text)
if match:
       name = match.group("name")
       print("Hello,", name)
# Вывод Hello, Peter


Шаблон соответствует тексту «My name is », за которым следует один или несколько словесных символов (буквы, цифры или знаки подчеркивания) и точка. Часть шаблона (? P\w+) создает именованную группу «name», которая соответствует одному или нескольким символам слова.

Функция re.search () ищет в тексте совпадение с шаблоном, а метод match.group («name») извлекает найденное совпадение для именованной группы «name».
Именованные группы также можно указывать в строках замены при использовании re.sub () для замены текста в строке. Для этой цели используйте синтаксис \g.

Например:

import re
text = "My name is Peter."
pattern = r"My name is (?P\w+)\."
new_text = re.sub(pattern, r"Your name is \g.", text)
print(new_text)
# Вывод: Your name is Peter.


В этом примере функция re.sub () заменяет текст, совпавший с шаблоном, строкой замены «Your name is \g.». Синтаксис \g используется для вставки захваченного совпадения для именованной группы «name» в заменяющую строку.

Группировка и захват: лучшие практики и советы


  • Используйте группировку для извлечения и манипулирования определенными частями совпадения. Группировка позволяет извлекать определенные подстроки из большой строки и применять преобразования к этим подстрокам.
  • Используйте именованные группы, чтобы сделать свои регулярные выражения более читаемыми и удобными в работе. Именованные группы особенно полезны при работе со сложными регулярными выражениями, которые имеют много вложенных групп.
  • Используйте группы без захвата, когда не требуется извлекать подстроку, совпадающую с группой. Группы без захвата — хороший способ сгруппировать части регулярного выражения, не влияя на результат совпадения.
  • Помните о последствиях использования групп для производительности. Регулярные выражения с большим количеством вложенных групп могут выполняться медленно, особенно если механизм регулярных выражений вынужден возвращаться назад, чтобы найти соответствие.
  • Тщательно тестируйте свои регулярные выражения, чтобы убедиться, что они фиксируют правильные соответствия. Регулярные выражения бывают сложными, поэтому важно протестировать их с различными входными данными, чтобы убедиться, что они работают правильно.
  • Используйте инструменты regex101 или Pythex для тестирования и отладки регулярных выражений. Эти инструменты позволяют ввести регулярное выражение и тестовую строку и просмотреть совпадения и группы, захваченные регулярным выражением.
  • При работе со сложными регулярными выражениями подумайте о том, чтобы разбить их на более мелкие и управляемые части. Так вы сможете проверить каждый компонент по отдельности.
Об авторе
Петр Severa Левашов — бывший хакер, ставший специалистом по компьютерной безопасности, привносит в это исчерпывающее руководство по программированию на Python поистине уникальный взгляд. Имея более чем 15-летний опыт работы с Python, Петр использовал этот язык в различных приложениях, начиная от управления серверными ботнетами для распространения спама и заканчивая торговлей криптовалютами. Имея две степени магистра в области компьютерной безопасности и экономики, а также богатый опыт преподавания, Петр излагает сложную информацию в увлекательной и академически обоснованной манере.

Родился 13 августа 1980 года в Санкт-Петербурге и прошел увлекательный путь, который привел его к тому, что он стал всемирно известным экспертом в своей области. Под псевдонимом Peter Severa когда-то руководил тремя крупными ботнетами для рассылки p2p-спама — Storm Worm, Waledac и Kelihos (Hlux), был модератором нескольких хакерских и кардерских форумов, включая легендарный carderplanet.com. В 2017 году арестован в Испании и экстрадирован в США, где ему были предъявлены обвинения. Частично признал себя виновным в обмен на снятие более серьезных обвинений.

Из этого опыта Петр извлек ценные жизненные уроки и теперь полностью посвящает себя честным и законным занятиям. В частности, стал успешным криптотрейдером с собственным алгоритмом, включающим ценовое действие и искусственный интеллект. Более подробную информацию о его торговом подходе ищите на сайте SeveraDAO.ai. Будучи твердым приверженцем свободы распространения информации, Петр стремится поделиться своими обширными знаниями с другими.

В этой книге Петр объединяет свои уникальные знания и предоставляет всеобъемлющий и увлекательный опыт обучения. Умение автора объяснять сложные концепции простыми словами делает эту книгу бесценной для всех, кто хочет освоить программирование на Python.

Дополнительную информацию об авторе вы найдете на сайте www.SeveraDAO.ai.

Петр также хотел бы выразить благодарность своему сыну Никите, без пытливых вопросов которого эта книга вряд ли увидела бы свет, и своей любимой жене Марии за ее постоянную поддержку, заботу и любовь. А также великолепному адвокату Ольге Леонидовне Исянамановой за ее профессиональную работу. Потрясающее владение УК РФ и его правоприменительной практикой, огромный опыт, честное и открытое общение с клиентами и адекватный подход к ценообразованию — что еще нужно от адвоката? Проблемы? Лучше звоните Ольге!


Более подробно с книгой можно ознакомиться на сайте издательства:

» Оглавление
» Отрывок

По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Python

© Habrahabr.ru