Сергей вам огромнейшее спасибо за материал.Спустя 4 года видео не теряет актуальность, объяснение лучшее из всех и хорошие примеры!Еще раз вам спасибо за урок!
Тема - адская жесть, круче, чем комплексные числа. Огромная благодарность автору - нужно иметь выдающийся дар, чтобы объяснить этот кошмар так внятно, и при этом не дать утратить энтузиазм двигаться дальше.
Сергей классный, столько обширных тем качественно объяснил за все это время. И до сих пор, спустя столько лет и более 100к подписчиков, ролики не начинаются с рекламы какой-нибудь it-школы. Очень приятно что человек делает это просто по призванию, а не с целью поднять бабла, сейчас таких на ютубе встретить все труднее.
Спасибо за урок. Тема правда жесть, но дорогу осилит идущий (или ползущий). Я решила, что буду смотреть и делать принт скрины. А там видно будет. Тут нужна мотивация немного больше, чем не решенная задачка на codewars.
В момент назначения имен сохраняющим скобкам фляга засвистела окончательно))) надо пройти пару курсов, и пару десятков часов практики как минимум, что бы хоть немного понять это. Огромный респект автору за объяснение, но сюда с без чемоданчика знаний и понимания re лучше не соваться))
Пересматриваю каждое видео минимум по 2 раза, так как тема сложная лично для меня)) Сергей, вы объясняете более чем понятно, за что огромная благодарность!
спасибо автору! очень крутой ресурс создаешь! Но сижу и немогу в голове уложить что произошло на 5,09. Квадратные скобки(символьный класс) в него прокидываем экранирование странным образом и двойные ковычки и одиночные. Как отрабатывают символьные классы непонятно! почему вообще надо было писать конструкцию [\"'](.+?)[\"']а не просто '(.+?)' , что в дальнейшем даст (')(.+?)\1 более простой и понятный особенно для новичка или я ошибаюсь?
[\"'] - Используем такой символьный класс для того, чтобы указать, что кавычки могут быть или одинарными или двойными. Все просто и понятно. Для новичка полезно видеть различные вариации на тему, и понимать, как они работают. Дабы потом читая чужой код не ломать голову над простыми вещами) May the force come with you!😎
Почему в шаблоне, с которым мы парсим xml-файл, для второй кавычки для атрибута lat указан номер 1-й сохраняющей группы? Для первой кавычки атрибута lat создаётся своя сохраняющая группа, по идее на нее должна быть ссылка для второй кавычки, либо для обеих кавычек атрибута lat должна быть ссылка на 1-ую сохраняющую группу.
У меня немного сгорела голова на фрагменте шаблона (.+?). Точка значит, что между кавычками может быть любой символ кроме преноса строки, "+" это квантификатор, который значит, что любой символ может встречаться от одного раза до бесконечности ( {1, }). Но потом сразу стоит "?" - который вроде как означает, что символ может либо отсутствовать либо либо встречаться только один раз ({0,1}. ТО есть не могу сопоставить, в голове как это вроде как символов может быть сколько угодно, но только один... 🥴 При этом воспроизвелу себя этот код. пробовал что со знаком вопроса, что без него. Что с дополнительными символами между кавычками названия картинки, что без них. Символ "?" никакого влияния на выдачу поиска не оказывает.😁
Хочется поблагодарить Сергея за (в который уже раз) внятное и живое объяснение не самой простой темы. Но остался один не совсем понятный момент. Когда мы выводили значение атрибута src тега
Как я понял, в этом шаблоне мы ([\"']) здесь проверям на соответствие первый символ после "=". Если он подошел, то мы можем "вызвать его"(вставить в шаблон) при помощи команды \1. Например, text = , тогда после прохождения первой кавычки(") наш шаблон по факту будет выглядеть так: ]*src=([\'"])(.+?)["], вместо \1 будет стоять то, что нашлось прежде в ([\'"]). Поэтому это убрержет нас от нахождения строки, в которой стоят различные кавычки в src.
Спасибо за урок! Скажите можно ли добавить в регулярное выражение переменную? Задача состоит в том чтобы получить от пользователя значение продолжительности слова и вывести все слова, которые не длиннее введённого значения
Чтобы передать в строку переменную, одним из простых вариантов будет использование префикса форматированной строки перед raw-строкой. Только необходимо утроить количество фигурных скобок, т.к. фигурная скобка в форматированной строке - это спецсимвол блока вычисления (первая пара скобок нужна чтобы указать формату, что нам нужна фигурная скобка как символ, 3я скобка - сам спецсимвол начала блока вычисляемого выражения): n = input() example = "Шла Саша по шоссе и сосала сушку." result = re.findall(fr"\b(\w{{1,{n}}})\b", example) print(result)
есть текстовый курс всех занятий с данного youtube канала, поищите в интернете сайт, там есть данный урок и в текстовом варианте есть приведен этот файл
Спасибо за отличное изложение материала! Не совсем понятно: (7:00) нумерация для получения элемента начинается с 1? Как-то непривычно, обычно везде с 0, да и в конечном массиве, так же к элементу с индексом 0 обращаться нужно было бы
голову бы оторвать тому, кто придумал этот ад в синтаксисе на основе знаков препинания и скобок... если не практиковать такое постоянно, то знания вылетают через две недели.
Толи я невнимательный, толи что, но никак не могу понять, для чего нужна запятая в квадратных скобках - "([0-9.,]" на 9:00 минуте, объясните кто-нибудь пожалуйста.
в нумерации скобак не сохраняется вариант или? | или я что то делаю не так? пример у меня куча этих lat и lon, я знаю что где то там есть особенные lat lon после их значения так же написано lat или lon, и я хочу найти только такие, тем самым я в template1 в конце указываю что используй для поиска первые скобки, а в template2 я уже явно прописываю такие же скобки, и почему то в template1 не находится так же как в template2, и с именноваными круглыми скобками видемо у меня такая же ошибка они написаны в template3, код добавлен ниже text = """ lat = 5, lon =7 top = 17 lat = 55lon, lon =7 top = 17 lat = 25lat, lon =15 lat top = 17 """ template1 = re.compile(r'(lat|lon)\s*=\s*([0-9]+)\s*\1',re.MULTILINE) template2 = re.compile(r'(lat|lon)\s*=\s*([0-9]+)\s*(lat|lon)',re.MULTILINE) template3 = re.compile(r'(?Plat|lon)\s*=\s*([0-9]+)\s*(?P=q)',re.MULTILINE) print(re.findall(template1,text)) print(re.findall(template2,text)) print(re.findall(template3,text)) P.S. и спасибо за видео я посмотрю все:)
@@selfedu_rus , я просто дурак, который полез изучать регулярки не изучив практически никаких основ языка, но рад, что смог их освоить в начале пути) спасибо огромное за бесплатный доступ к информации!
match = re.findall(r"\((.*?)\|(.*?)\)", txt) Вот правильный и краткий ответ, больше часа потратил, спасибо за задачку)) Только учусь регулярным выражениям