Как работают regexp в yt-dlp?
Привет, ЛОР!
Я уже мозг сломал, почему оно не работает. Хочу скачать видео с ютуб-канала с коллекцией по плейлистам. Имена плейлистов на кириллице, содержат пробелы. Некоторые плейлисты надо исключить. Некоторые плейлисты могут иметь название на англ. и на кириллице и с пробелами. Если бы я мог писать регулярки с опорой на какой-то regex101 и yt-dlp работал бы ожидаемо, меня бы это устроило. Но оно не работает так, как я ожидаю.
Собсно вопрос в том, что я делаю не так, что регулярки не работают?
Для дебага залил некую (вроде под свободной лицензией) видюшку на свой канал, создал пачку разных плейлистов и пытаюсь разобраться как это работает.
Вот я показываю список плейлистов на канале, которые матчатся регулярке «testplaylist». По данным regex101 всё должно сматчится и хотя бы один плейлист с идентичным именем должен быть в выводе команды. Но у меня ничего не вывелось.
desktop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist=~testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
desktop:~$
Добавляю в фильтр отрицание !
всего условия матчинга и получаю результат. Т.е. как будто бы выражение валидное, но почему-то при инвертировании логики меняется и сама логика.
desktop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist!=~testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
testplaylist кириллица
тестовыйплейлист
тестовый плейлист
test playlist
testplaylist
desktop:~$
Все иные попытки запихать выражение в разные кавычки, слеши тоже не дают результата.
Доходит до смешного! Вот такое выражение с точным сравнением вывода и фильтра работает только в инвертированом виде. Тут мы не видим плейлиста с именем testplaylist
desktop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist!=testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
testplaylist кириллица
тестовыйплейлист
тестовый плейлист
test playlist
desktop:~$
Убираем отрицание и не видим ничего
deskop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist=testplaylist' https://www.youtube.com/@maxmuller8233/playlists --no-warning
desktop:~$
Ну и напоследок весёлые факты из моего дебага — паттерн регулярки t.*
deskop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist~=t.*' https://www.youtube.com/@maxmuller8233/playlists --no-warning
testplaylist кириллица
test playlist
testplaylist
deskop:~$
Паттерн регулярки te.*
deskop:~$ ./bin/yt-dlp --print playlist_title --match-filters 'playlist~=te.*' https://www.youtube.com/@maxmuller8233/playlists --no-warning
deskop:~$
deskop:~$ python -V
Python 3.12.6
deskop:~$ ./bin/yt-dlp --version
2024.10.07
deskop:~$ bash --version
GNU bash, версия 5.2.26(1)-release (x86_64-redhat-linux-gnu)