2015-03-22 3 views
1

У меня есть этот URLКак я могу сопоставить регулярное выражение для этого URL-адреса?

http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar

В тот номер, который приходит после «загрузки» генерируется случайным образом и эти два каталога после «mysite.com» получить случайную строку для каждого файла.

Я пробовал с (\.rar$), чтобы найти расширение файла, чтобы загрузить файл, но проблема в том, что на этой странице есть другая ссылка с URL-адресами, которые заканчиваются на .rar-файл, и это не фактическая ссылка для скачивания. Поэтому поиск ссылки на скачивание по расширению здесь не помогает. Мне нужен шаблон, как показано ниже.

http://download\[random_no_here\].mysite.com/\[randomstring_number_included here/\[another_randomstring_with_number_included_here/the_actual_file_here_with_random_name.rar

ответ

0

Это регулярное выражение будет делать то, что вы хотите:

r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar' 

\d Удачные цифры, \w Удачные алфавитно-цифровые (включая подчеркивание); + говорит, чтобы соответствовать одному или нескольким предыдущим шаблонам. Мы используем \ перед .com и .rar, так что . интерпретируется буквально, а не как шаблон регулярного выражения.

тест

import re 

p = re.compile(r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar') 

table = [ 
    'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar', 
    'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw', 
    'http://download123.mysite.com/456/789/upload.rar', 
    'http://downloadabc.mysite.com/def/ghi/upload.rar', 
    'http://download1234.mysite.com/def/ghi/upload.rar', 
    'http://download1234.mysite.org/def/ghi/upload.rar', 
] 

for s in table: 
    m = p.match(s) 
    print s, m is not None 

выход

http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar True 
http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw False 
http://download123.mysite.com/456/789/upload.rar True 
http://downloadabc.mysite.com/def/ghi/upload.rar False 
http://download1234.mysite.com/def/ghi/upload.rar True 
http://download1234.mysite.org/def/ghi/upload.rar False 

Если фактическое имя файла изменяется, то вы можете использовать

r'http://download\d+\.mysite\.com/\w+/\w+/\w+\.rar' 

или

r'http://download\d+\.mysite\.com/\w+/\w+/[a-z]+\.rar' 

если имя всегда будет строчные буквы


Кстати, это вообще not a good idea to parse HTML with regex, но если формат страницы фиксируется и достаточно просто вы можете быть в состоянии уйти с ним ,

+0

Я использую это, чтобы найти ссылку в python и beautifulsoup. '' 'link2 = soup2.findAll (href = re.compile ('' http: // download \ d + \ .mysite \ .com/\ w +/\ w +/[az] + \. Rar '')) '' ' , но не нашел ссылку. – Zip

+1

Спасибо. Сейчас он работает! – Zip

Смежные вопросы