2016-08-30 6 views
1

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

data 
http://hsotname.com/2016/08/a-b-n-r-y-u 
https://www.hostname.com/best-food-for-humans 
http://www.hostname.com/wp-content/uploads/2014/07/a-w-w-2.jpg 
http://www.hostname.com/a/geniusbar/ 
http://www.hsotname.com/m/ 
http://www.hsotname.com/ 

Я хочу, чтобы избежать первого HTTP: // или https: // и проверить последний «/» и разобрать оставшиеся части URL-адреса. Но проблема здесь в том, что у нас есть «/» в конце нескольких URL-адресов. Вывод, который я хочу,

parsed 
a-b-n-r-y-u 
best-food-for-humans 
a-w-w-2.jpg 
NULL 
NULL 
NULL 

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

Благодаря

+1

'. * \/(. *)' Должен делать трюк – depperm

+1

я запутался, почему вы думаете, что нужно регулярное выражение?Разделение на последний '/' получается довольно близко –

+0

или вы можете использовать 'rindex ('/')' – depperm

ответ

2

Другим вариантом является просто разделить на "/" и взять последний элемент:

"http://hsotname.com/2016/08/a-b-n-r-y-u".split("/")[-1] 
# 'a-b-n-r-y-u' 

"http://www.hostname.com/a/geniusbar/".split("/")[-1] 
# '' 
0

Я бы с чем-то вроде этого:

\/([^/]*)$ 

Это ll совпадение с последней косой чертой, а затем захватить что-нибудь после нее (если угодно), которая не является косой чертой.

0

Regex - не лучший инструмент в этом случае. Просто используйте str.rfind:

[url[url.rfind('/'):] for url in data] 

даст вам то, что вы ищете

1

регулярных выражений, вероятно, не так, как вы должны это сделать - если учесть, что вы отметили вопрос python, попробуйте (при условии, URL в названии url):

last-part = url.split('/')[-1] 

Это разбивает URL в список подстрок между косой черты, и сохраняет последний в last-part.

Если вы настаиваете на том, чтобы использовать регулярные выражения, хотя сравнение в конце строки полезно здесь. Попробуйте /[^/]*$, который соответствует косой чертой, за которой следует любое количество без следов, за которым следует конец строки.

Если бы вы хотите, чтобы соответствовать последним непустая часть следующей косой черты (если вы не хотите, последние три примера, чтобы вернуться ""), вы могли бы сделать /[^/]*/?$, что позволяет, но не требует ни одного слэш в самом конце.

0

Возможно, возможно, над убийством для примера, но если вам нужно иметь дело с фрагментами местоположения/просто именами местоположений (т. Е. Последняя косая черта является частью http и т. Д.) (Разделение http://hostname.com и взятие последнего / даст вы hostname.com - urlsplit даст путь '' вместо) then'll вы, вероятно, безопаснее от использования:

>>> from urllib.parse import urlsplit 
>>> urls = ['http://hsotname.com/2016/08/a-b-n-r-y-u', 'https://www.hostname.com/best-food-for-humans', 'http://www.hostname.com/wp-content/uploads/2014/07/a-w-w-2.jpg', 'http://www.hostname.com/a/geniusbar/', 'http://www.hsotname.com/m/', 'http://www.hsotname.com/'] 
>>> [urlsplit(url).path.rpartition('/')[2] for url in urls] 
['a-b-n-r-y-u', 'best-food-for-humans', 'a-w-w-2.jpg', '', '', ''] 
+0

Но когда у вас есть url like 'hostname.com', вы снова получите полный URL-адрес. Думаю, это зависит от что OP хочет в этот момент. –

+0

@double_j true, но вы, вероятно, сможете сделать пару бит с попыткой, которую 'urlsplit' заставил попробовать и с этим справиться, но да - было бы не до OP, чтобы выяснить, какая логика они хотите применить в кромках ... –

0

Проверьте с конца URL, и матч все, но/

[^/]+?$ 

или

\b[^/]+?\b$