2016-08-30 6 views
-1

Я имею следующие данные,Regex чтобы разобрать часть URL с помощью питона

data['url'] 
http://hostname.com/aaa/uploads/2013/11/a-b-c-d.jpg https://www.aaa.com/ 
http://hostname.com/bbb/uploads/2013/11/e-f-g-h.gif https://www.aaa.com/ 
http://hostname.com/ccc/uploads/2013/11/e-f-g-h.png http://hostname.com/ccc/uploads/2013/11/a-a-a-a.html 
http://hostname.com/ddd/uploads/2013/11/w-e-r-t.ico 
http://hostname.com/ddd/uploads/2013/11/r-t-y-u.aspx https://www.aaa.com/ 
http://hostname.com/bbb/uploads/2013/11/t-r-w-q.jpeg https://www.aaa.com/ 

Я хочу, чтобы узнать форматы, такие как JPG, GIF, PNG, ICO-, .aspx , .html, .jpeg и проанализируйте его назад, пока не найдет «/». Кроме того, я хочу проверить наличие нескольких событий в строке. Мой вывод должен быть,

data['parsed'] 
a-b-c-d 
e-f-g-h 
e-f-g-h a-a-a-a 
w-e-r-t 
r-t-y-u 
t-r-w-q 

Я имею в виду, вместо того, чтобы писать отдельные команды для каждого из форматов, есть способ, чтобы написать все под одной командой.

Может ли кто-нибудь помочь мне в письменной форме для инструкций тезисов? Я новичок в регулярном выражении, и любая помощь будет оценена по достоинству.

+0

Возможный дубликат [Python: Получить URL-адреса пути] (http://stackoverflow.com/questions/7894384/python-get-url-path-sections) –

+0

Должно ли это быть сделано с регулярным выражением? 'urlparse' (как указано в возможном дубликате) делает работу великолепно. –

+0

@JIm YEs. У меня есть sevaral условия, подобные этому, и URL-адрес недостаточно структурирован для анализа через urlparse. – haimen

ответ

0

Вы можете попробовать это:

data['parse'] = re.findall(r'[^/]+\.[a-z]+ ',data['url']) 

Это будет выбрать все имена файлов с их расширениями. Если вы хотите, чтобы удалить расширения, приведенный выше код возвращает список, который вы можете затем процесс с пониманием и список re.sub как так:

[re.sub('\.[a-z]+$','',exp) for exp in data['parse']] 

Используйте функцию .join, чтобы создать строку, как показано в ответ Тотем в

1

это строит список имя для пар расширения

import re 
results = [] 
for link in data: 
    matches = re.search(r'/(\w-\w-\w-\w)\.(\w{2,})\b', link) 
    results.append((matches.group(1), matches.group(2))) 
+0

он не работает для 4-х букв, таких как jpeg, aspx, html – haimen

+0

удалено ограничение расширения char – Julius

1

Этот шаблон возвращает имена файлов. Я просто использовал один из Ваших сайтов, чтобы продемонстрировать, больше, вы можете просто добавить матчи к списку результатов:

import re 
url = "http://hostname.com/ccc/uploads/2013/11/e-f-g-h.png http://hostname.com/ccc/uploads/2013/11/a-a-a-a.html" 

p = r'((?:[a-z]-){3}[a-z]).' 
matches = re.findall(p, url) 

>>> print('\n'.join(matches)) 
e-f-g-h 
a-a-a-a 

Существует предположение, что URLs все имеют общую форму вы предоставили.