Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 November 11

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
def get_vk_audio_owner_id(link):
   res = re.search("(^https://)?(m\.)?(vk\.com/)?(\S*)?(audios)(\d+)", link)
   if res:
       return res.group(6)
   else:
       return False


def get_vk_video_id(link):
   res = re.search("(^http(s)?://)?(m\.)?(vk\.com/)?(\S*)?(video)(-?\d+_\d+)(\D\S*)?", link)
   if res:
       return res.group(7)
   else:
       return False


def get_coub_video_id(url):
   res = re.search(r'(^https://)?(www\.)?(coub\.com/view/)(\w+)', url)
   if res:
       return res.group(4)
   else:
       return False
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
для видео разных вот
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
линк то да
а у меня несколько таких штук
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
так и чего
re.search("(^http(s)?://)?(m\.)?(vk\.com/)?(\S*)?(video)(-?\d+_\d+)(\D\S*)?", link)
вот здесь например
может быть в ссылке https
может быть http
может вообще не быть
может быть m.vk
а может просто vk
и тд
в любом случае - res.group(7) мне вернет id
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
то что в предпоследней скобке регулярки
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Ща костыль будет
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Зато рабочий
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
это правильный подход
сперва нужно сделать то что как-то работает
это лучше чем сделать то что не работает
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
У меня сейчас это регулярка все равно выцепляет символы a-d
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
от этого не уйти к сожалению
Придется еще число матчить сначала, потом еще матчить с той регуляркой
источник

ДК

Даниил Кустов... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
А не, не придется, у меня samp.dll перед обработкой заменяется на число
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
есть еще в регулярках штуки такие
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
lookahead
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
lookbehind
по русски хз как это
искать после искать до
по дефолту регулярки жадные
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ты можешь при помощи таких вот символов сделать их ленивыми
https://docs.python.org/3/library/re.html
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
res = re.search('(?<=/)\w+\.(webm|mp4)', self.link)
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
например если ссылка будет типа https://2ch.hk/b/src/225958705/15963757415292.webm.webm - вернется https://2ch.hk/b/src/225958705/15963757415292
а в случае жадной регулярки - https://2ch.hk/b/src/225958705/15963757415292.webm и https://2ch.hk/b/src/225958705/15963757415292
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
короче это ограничивает глубину поиска вхождений
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
если ты нашел уже подстроку соответствующую - ты дальше внутри этой подстроки уже не ищешь
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
собственно как раз жадные регулярки обычно и являются причиной зависания
программа проваливается в подстроки и начинает искать в них
а потом проваливается в те подстроки которые нашла и тд
ну и вообще - регулярки это недетерминированный конечный автомат
то есть он по определению может зависнуть
источник