Тёмный

Регулярные выражения #3: сохраняющие скобки и группировка 

selfedu
Подписаться 159 тыс.
Просмотров 23 тыс.
50% 1

Инфо-сайт: proproprogs.ru
Как выполнять группировку результатов поиска, их сохранение для дальнейшего использования.

Опубликовано:

 

25 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 58   
@leonardodebrycho5795
@leonardodebrycho5795 2 месяца назад
Сергей вам огромнейшее спасибо за материал.Спустя 4 года видео не теряет актуальность, объяснение лучшее из всех и хорошие примеры!Еще раз вам спасибо за урок!
@nadyamoscow2461
@nadyamoscow2461 3 года назад
Тема - адская жесть, круче, чем комплексные числа. Огромная благодарность автору - нужно иметь выдающийся дар, чтобы объяснить этот кошмар так внятно, и при этом не дать утратить энтузиазм двигаться дальше.
@horror3671
@horror3671 6 месяцев назад
Сергей классный, столько обширных тем качественно объяснил за все это время. И до сих пор, спустя столько лет и более 100к подписчиков, ролики не начинаются с рекламы какой-нибудь it-школы. Очень приятно что человек делает это просто по призванию, а не с целью поднять бабла, сейчас таких на ютубе встретить все труднее.
@v.sergei
@v.sergei 4 года назад
Какое же удовольствие, слушать ваше объяснение. Спасибо!
@elenalevasheva3830
@elenalevasheva3830 Год назад
Спасибо за урок. Тема правда жесть, но дорогу осилит идущий (или ползущий). Я решила, что буду смотреть и делать принт скрины. А там видно будет. Тут нужна мотивация немного больше, чем не решенная задачка на codewars.
@GordonBreazz
@GordonBreazz 3 года назад
Лучшее что я видел из обучающих видео. Спасибо за вашу работу
@staerep5621
@staerep5621 2 года назад
В момент назначения имен сохраняющим скобкам фляга засвистела окончательно))) надо пройти пару курсов, и пару десятков часов практики как минимум, что бы хоть немного понять это. Огромный респект автору за объяснение, но сюда с без чемоданчика знаний и понимания re лучше не соваться))
@86Blind
@86Blind 3 года назад
Кратко, четко и по все делу без воды. Браво !!!
@makedatauseful1015
@makedatauseful1015 Год назад
Огромное спасибо за ваши уроки, вы отлично объясняете сложную для восприятия тему
@Zavintyshka
@Zavintyshka 2 года назад
Попробовал сам реализовать последний пример и каково было мое удивления, что у меня получилось это сделать. Просто фантастика. Спасибо Вам большое!
@recursion3955
@recursion3955 3 года назад
Потрясающее объяснение!
@vladislavsharaev9139
@vladislavsharaev9139 2 года назад
Вообще суперски объясняет всё. Отличный канал!! Спасибо!
@tanyadiduk3640
@tanyadiduk3640 Год назад
Пересматриваю каждое видео минимум по 2 раза, так как тема сложная лично для меня)) Сергей, вы объясняете более чем понятно, за что огромная благодарность!
@ProgrammingBro-e9t
@ProgrammingBro-e9t Год назад
Пахнешь слабостью , я пересматриваю 4 раза и делаю конспект
@ТимурГаджиев-ч8й
@ТимурГаджиев-ч8й 2 года назад
спасибо большое, Ваши уроки очень помогают
@ll2pakll
@ll2pakll 4 года назад
Взрыв бошки....
@Abombimbom
@Abombimbom 4 года назад
Плюсую, но объясняет збс
@maximmaxim8374
@maximmaxim8374 2 года назад
согл
@antontroitski6173
@antontroitski6173 2 года назад
спасибо автору! очень крутой ресурс создаешь! Но сижу и немогу в голове уложить что произошло на 5,09. Квадратные скобки(символьный класс) в него прокидываем экранирование странным образом и двойные ковычки и одиночные. Как отрабатывают символьные классы непонятно! почему вообще надо было писать конструкцию [\"'](.+?)[\"']а не просто '(.+?)' , что в дальнейшем даст (')(.+?)\1 более простой и понятный особенно для новичка или я ошибаюсь?
@alex_satan
@alex_satan 2 года назад
[\"'] - Используем такой символьный класс для того, чтобы указать, что кавычки могут быть или одинарными или двойными. Все просто и понятно. Для новичка полезно видеть различные вариации на тему, и понимать, как они работают. Дабы потом читая чужой код не ломать голову над простыми вещами) May the force come with you!😎
@hardlabor9412
@hardlabor9412 Год назад
may the dark side come with you
@alex_satan
@alex_satan 2 года назад
Это! Просто! Ох*****(ну вы поняли)! Все ясно и понятно, автор как всегда)
@MrAnyTwo
@MrAnyTwo 3 года назад
Почему в шаблоне, с которым мы парсим xml-файл, для второй кавычки для атрибута lat указан номер 1-й сохраняющей группы? Для первой кавычки атрибута lat создаётся своя сохраняющая группа, по идее на нее должна быть ссылка для второй кавычки, либо для обеих кавычек атрибута lat должна быть ссылка на 1-ую сохраняющую группу.
@ЮрийГорсков-т7б
@ЮрийГорсков-т7б 6 месяцев назад
У меня немного сгорела голова на фрагменте шаблона (.+?). Точка значит, что между кавычками может быть любой символ кроме преноса строки, "+" это квантификатор, который значит, что любой символ может встречаться от одного раза до бесконечности ( {1, }). Но потом сразу стоит "?" - который вроде как означает, что символ может либо отсутствовать либо либо встречаться только один раз ({0,1}. ТО есть не могу сопоставить, в голове как это вроде как символов может быть сколько угодно, но только один... 🥴 При этом воспроизвелу себя этот код. пробовал что со знаком вопроса, что без него. Что с дополнительными символами между кавычками названия картинки, что без них. Символ "?" никакого влияния на выдачу поиска не оказывает.😁
@АркадийПоддубный
@АркадийПоддубный 4 месяца назад
Хочется поблагодарить Сергея за (в который уже раз) внятное и живое объяснение не самой простой темы. Но остался один не совсем понятный момент. Когда мы выводили значение атрибута src тега
@DREAMONFORYOU
@DREAMONFORYOU Месяц назад
Как я понял, в этом шаблоне мы ([\"']) здесь проверям на соответствие первый символ после "=". Если он подошел, то мы можем "вызвать его"(вставить в шаблон) при помощи команды \1. Например, text = , тогда после прохождения первой кавычки(") наш шаблон по факту будет выглядеть так: ]*src=([\'"])(.+?)["], вместо \1 будет стоять то, что нашлось прежде в ([\'"]). Поэтому это убрержет нас от нахождения строки, в которой стоят различные кавычки в src.
@SlayerBUMER
@SlayerBUMER 2 года назад
Объяснение отличное, но мой мозг... Сложна
@KVANT8888
@KVANT8888 3 года назад
Как, как это все запомнить?
@VanGogVincentVan
@VanGogVincentVan 4 года назад
Пасеба учитель вы лучший
@thanderstaff9593
@thanderstaff9593 Год назад
Спасибо за урок! Скажите можно ли добавить в регулярное выражение переменную? Задача состоит в том чтобы получить от пользователя значение продолжительности слова и вывести все слова, которые не длиннее введённого значения
@SayXaNow
@SayXaNow Год назад
Чтобы передать в строку переменную, одним из простых вариантов будет использование префикса форматированной строки перед raw-строкой. Только необходимо утроить количество фигурных скобок, т.к. фигурная скобка в форматированной строке - это спецсимвол блока вычисления (первая пара скобок нужна чтобы указать формату, что нам нужна фигурная скобка как символ, 3я скобка - сам спецсимвол начала блока вычисляемого выражения): n = input() example = "Шла Саша по шоссе и сосала сушку." result = re.findall(fr"\b(\w{{1,{n}}})\b", example) print(result)
@jamjam3337
@jamjam3337 7 месяцев назад
👏👍
@max-zay
@max-zay Год назад
на 4:50 минуте, объясните необходимость использования вопросительного знака в строке 4. Не очень понимаю зачем он нужен.
@selfedu_rus
@selfedu_rus Год назад
для защиты от SQL-инъекций
@indominusmonster6433
@indominusmonster6433 2 года назад
файл xml хотелось бы видеть в описании,хочется самому попробовать попользоваться регулярными выражениями
@romaniksanov8237
@romaniksanov8237 2 года назад
есть текстовый курс всех занятий с данного youtube канала, поищите в интернете сайт, там есть данный урок и в текстовом варианте есть приведен этот файл
@pesycorm4639
@pesycorm4639 3 года назад
Спасибо за отличное изложение материала! Не совсем понятно: (7:00) нумерация для получения элемента начинается с 1? Как-то непривычно, обычно везде с 0, да и в конечном массиве, так же к элементу с индексом 0 обращаться нужно было бы
@selfedu_rus
@selfedu_rus 3 года назад
да, здесь с 1
@narsyy_y
@narsyy_y Год назад
голову бы оторвать тому, кто придумал этот ад в синтаксисе на основе знаков препинания и скобок... если не практиковать такое постоянно, то знания вылетают через две недели.
@Vlad1998996
@Vlad1998996 3 года назад
Чуть непонятно про "if match:", это проверка на то что строка не пустая и содержит такие данные как lat, lon?
@selfedu_rus
@selfedu_rus 3 года назад
нашлось ли совпадение в строке по указанному ранее регулярному выражению
@Vlad1998996
@Vlad1998996 3 года назад
@@selfedu_rus Да, пересмотрел всё стало более понятным.
@Beningo_Rossi
@Beningo_Rossi Год назад
Толи я невнимательный, толи что, но никак не могу понять, для чего нужна запятая в квадратных скобках - "([0-9.,]" на 9:00 минуте, объясните кто-нибудь пожалуйста.
@selfedu_rus
@selfedu_rus Год назад
да, в квадратных скобках просто прописываются допустимые символы, любые.
@Beningo_Rossi
@Beningo_Rossi Год назад
@@selfedu_rus спасибо большое за ответ. Боюсь что-то упустить
@ИльяШутов-н1х
@ИльяШутов-н1х 3 года назад
в нумерации скобак не сохраняется вариант или? | или я что то делаю не так? пример у меня куча этих 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. и спасибо за видео я посмотрю все:)
@КостяГорохов-б6с
@КостяГорохов-б6с 3 года назад
А почему тема не темная? Для глаз вредно столько света.
@АндрейАстанаев-п9х
Все понял кроме одного. Почему мы пишем [0], когда добавляем элемент в список, это необходимо? что это дает 9:59
@selfedu_rus
@selfedu_rus 2 года назад
там вложенные (двумерные) списки, и [0] обращение к первому, там как раз нужные нам вхождения, можете посмотреть объект print(match)
@АндрейАстанаев-п9х
@@selfedu_rus , я просто дурак, который полез изучать регулярки не изучив практически никаких основ языка, но рад, что смог их освоить в начале пути) спасибо огромное за бесплатный доступ к информации!
@Grigorev84
@Grigorev84 2 года назад
жуткая штука
@user-tt9hx4kh1e
@user-tt9hx4kh1e Месяц назад
Тема немного геморойная из за своеобразного синтаксиса. Куча символов, глаза разбегаются, требуется привыкание... В целом то понятна суть
@vrabosh
@vrabosh 4 года назад
txt = 'ыыы (Hello|Hi) ввв (les amis|coders), вввё' хочу вот такое результат: [('Hello', 'Hi'), ('les amis', 'coders')] как сделать?
@meylyssa3666
@meylyssa3666 3 года назад
Получилось уже? Я пробовала вот так re.findall(r".*(\(.*\|.*\))", txt) но ответ выдает (les amis|coders) и все. Очень хотелось бы узнать решение
@nadyamoscow2461
@nadyamoscow2461 3 года назад
match = re.findall(r"([\s\w]+)[|]([\s\w]+)", txt) print(match) # вернет [('Hello', 'Hi'), ('les amis', 'coders')]
@pseudonym2
@pseudonym2 2 года назад
@@nadyamoscow2461 можно было бы и легче: r"\w*\s*(\(Hello|Hi\) | \(les amis|coders\))"
@MrLerooy
@MrLerooy Год назад
match = re.findall(r"\((.*?)\|(.*?)\)", txt) Вот правильный и краткий ответ, больше часа потратил, спасибо за задачку)) Только учусь регулярным выражениям
Далее
Сняли домик блин🏠
23:19
Просмотров 767 тыс.
Интересный наборчик 😀
00:12
Просмотров 14 тыс.