通过python拆分URL

时间:2016-04-25 16:22:14

标签: python regex python-2.7 split

我有这个网址:

/drive/rayon.productlist.seomenulevel/fh_refpath$003dfacet_1$0026fh_refview$003dlister$0026fh_view_size$003d100$0026fh_reffacet$003dcategories$0026auchan_page_type$003dcatalogue$0026fh_location$003d$00252f$00252f52$00252ffr_FR$00252fdrive_id$00253d993$00252fcategories$00253c$00257b52_3686967$00257d$00252fcategories$00253c$00257b52_3686967_3686326$00257d$00252fcategories$00253c$00257b52_3686967_3686326_3700610$00257d$00252fcategories$00253c$00257b52_3686967_3686326_3700610_3700620$00257d/Capsules$0020$002843$0029/3700620?t:ac=3686967/3700610

我想要最后3个数字:item [0] = 3700620,item [1] = 3686967,item [2] = 3700610

我试过这个

one =   url.split('/')[-1]
two =   url.split('/')[-2]

第一个结果是3700610"

和第二个3700620?t:ac=3686967

4 个答案:

答案 0 :(得分:4)

非正则表达式方法将涉及使用urlparse和一些拆分:

>>> import urlparse
>>> parsed_url = urlparse.urlparse(url) 
>>> number1 = parsed_url.path.split("/")[-1]
>>> number2, number3 = urlparse.parse_qs(parsed_url.query)["t:ac"][0].split("/")
>>> number1, number2, number3
('3700620', '3686967', '3700610')

正则表达式方法:

>>> import re
>>> re.search(r"/(\d+)\?t:ac=(\d+)/(\d+)$", url).groups()
('3700620', '3686967', '3700610')

其中(\d+)saving/capturing groups匹配一个或多个数字,\?会匹配文字问号(我们需要将其转义,因为它具有特殊含义),{{1将匹配字符串的结尾。

你也可以name the groups制作字典:

$

答案 1 :(得分:3)

使用正则表达式的另一种解决方案。

import re
re.findall('\d+', url)[-3:]

答案 2 :(得分:2)

以下两项应该有效。

url.split('/')[-2].split('=')[1]
url.split('/')[-2].split('?')[0]

答案 3 :(得分:2)

试试这个:

split_list = url.split('/')
third = split_list[-1]
first, second = split_list[-2].split('?t:ac=')