Регулярные выражения #4: флаги и проверки

preview_player
Показать описание
Реализация проверок в шаблонах. Проверочные символы: ^, $, \A, \b, \B, \Z, (?=exp), (?!exp) и другие. Проверочные выражения: (?(id|name)yes_pattern) и (?(id|name)yes_pattern|no_pattern). Флаги: re.ASCII, re.IGNORECASE, re.MULTILINE, re.DOTALL, re.VERBOSE.
Рекомендации по теме
Комментарии
Автор

ставьте + кому все было ясно в предыдущих уроках, а в этом - поплыл))

johnmazepa
Автор

Я так и думал, что регулярки тема не простая) Использовал готовые шаблоны в своих проектах, а сейчас сам решил ознакомиться. Спасибо за урок!

anaevskiy
Автор

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

nadyamoscow
Автор

Просто топ, не останавливайся, у тебя круто получается!)
Задумайся о создании своих курсов на юдеми или степике, ты можешь многим начинающим помочь!)

soldatov_ss
Автор

В интернете много материала, но мало понятного материала🤔 Много людей, которые знают регулярки, но как же мало, которые могут их объяснить. Спасибо!

СергейЮров-бе
Автор

Спасибо, урок супер. Появляется надежда, что пусть не сразу, не за раз, но можно разобраться

elenalevasheva
Автор

Ты просто мастер Шифу!!! Спасибо за то, что ты делаешь

СергейЛадыка-жю
Автор

И вот на 4м уроке по регуляркам у меня взорвался мозг!)

setloger
Автор

мне это напоминает манускрипты на египетских пирамидах, но мне надо в этом разобраться

dmitriyaleksandrovich
Автор

согласно википедию
(?=шаблон) используется для проверки заканчивается ли фрагмент текста этим шаблоном
(?<=шаблон) используется для проверки начинается ли фрагмент текста этим шаблоном
в приведенном вами примерах очень трудно понять разницу между ними (по крайней мере для новичков).

СарварХайдаров-чй
Автор

Спасибо за видео! Очень хорошо объясняете

antonstepbystep
Автор

Долго не мог разобраться почему кавычка между пробелами не завершает шаблон. 9:39
В итоге после хорошего мозгового штурма я понял, что
кавычка между пробелами не сопоставляется с завершающим выражением, так как перед ней находится символ пробела, который выполняет условие несовпадения. Как следствие, нарушается необходимое условие для завершения шаблона (текст, а только потом кавычка).

podgorniy.r
Автор

8:45 - я думаю, что в данном случае тут использовался классический синтаксис как по документация ретроспективной негативной проверки, поэтому так отобразилось. (?<![ \t])[\"'] обозначает "истинно, если перед знаком " или ' нет пробела или табуляции. Вот как раз content=" закрывает этот паттерн, а перед ним пробел перед " подходит под категорию (.+?), поэтому все работает. Но вы утверждаете, что это из-за (.+?) перед (?<![ \t]). Как вообще работает такой синтаксис? Полная каша в голове. Я так понимаю, что при (?<![ \t]) пробелов или табуляций НЕ должно быть после выражений, однако все работает, просто строка добавляется без пробела, есть он есть.

beatrixx_kiddo
Автор

Какая жесть! Взрыв мозга)))
Подача материала, как всегда - топчик!

alex_satan
Автор

в очередной раз божественная спасительная теория, которая все сложила по полочкам!

kseniyabristol
Автор

Очень плохой урок, ввели многих учеников в заблуждение. Ретроспективные проверки ПОСЛЕ тела шаблона даже индусы боятся использовать, дабы не вызвать гнев Будды. Нарушено золотое правило проверки: «текст, подходящий под условие проверки, не должен быть началом или концом найденного шаблоном результата, в противном случае такая проверка потеряет свой изначальный смысл применения, а именно: определить границы распространения шаблона, но не попасть в результат».
А у вас что на 3:35? «Конец шаблона должен соответствовать выражению exp». В какой документации вы нашли сию непотребную трактовку? Если перефразировали под свой стиль материал с хабра – то вы неверно поняли, о каком шаблоне там идет речь в определении. А речь там шла о конце шаблона ТЕЛА ПРОВЕРКИ, куда будет установлен маркер начала поиска, а не о конце шаблона, к которому эта проверка будет применена.
Ничуть не смутило далее, что закрывающий тег скрипта попал в результаты, как только изменили проверку на ретроспективную? Мы пытаемся найти всю информацию, которая МЕЖДУ тегами, не надо мне захватывать лишние куски.
А потерянный пробел дальше 8:15? В смысле пробел игнорируется? Это полноценный символ, присутствующий между кавычками, и он является неотъемлемой частью информации внутри кавычек и вдруг «игнорируется». По какому такому праву? Ах, да по праву ретроспективной проверки в конце шаблона (сарказм). Потом вообще тихий ужас, когда поиск стал прыгать через кавычки, на которых был обязан остановится.
Плохо, очень плохо. Причем было сделано уже несколько замечаний в комментариях, а вы даже не соизволили закрепить ответный комментарий «Извините мол, накосячил. Видео перезаливать не буду, но никогда не делайте так, как я в этом уроке, потому что ретроспективная проверка должна идти ПЕРЕД шаблоном. Для этого она и предназначена, а любое другое её использование – то от лукавого». А так в целом без хейта и негатива, с кем не бывает. Добра вам и процветания каналу.

SayXaNow
Автор

Код не гибкий. Если в тексте будет несколько вхождений <script> </script>, то выдача будет содержать все от первого вхождения <script> до последнего </script>.

vonravik
Автор

Спасибо огромное за уроки! они очень полезные! У меня возник вопрос: я хотел вывести все символы до буквы "i". И у меня это получилось только когда я написал следующее -
text = "<p>Картинка <img src='bg.jpg'> в тексте</p>"

match = re.findall(r".+?(?=i)", text)

Но почему-то когда я писал вместо плюса "*" то в результате появлялся ещё - "" Не понимаю почему... это ведь в данном случае должно быть одно и тоже?

АлексейМолодан-зф
Автор

Привет, почему открывающий тег script не попадает в match?

bezborodovanton
Автор

я только в этом видео понял зачем круглые скобки)

gpankov