繁体   English   中英

使用regex从url中提取子路径

[英]Extract sub path from url with regex

我有这个网址:

 http://www.example.com/en/news/2016/07/17/1207151/%D9%81%D8%AA%D9%88%D8%A7%DB%8C-%D8%B1%D9%87%D8%A8%D8%B1-

我要在这里提取1207151

这是我的regext:

pattern = '(http[s]?:\/\/)?([^\/\s]+\/)+[^/]+[^/]+[^/]+[^/]/(?<field1>[^/]+)/'

但这是错的!

我的错是什么?

你可以在python代码中使用这个正则表达式:

>>> url = 'http://www.example.com/en/news/2016/07/17/1207151/%D9%81%D8%AA%D9%88%D8%A7%DB%8C-%D8%B1%D9%87%D8%A8%D8%B1-'
>>> re.search(r'^https?://(?:([^/]+)/){7}', url).group(1)
'1207151'

([^/]+)/){7}将匹配任何非正斜杠和/ 7次中的一个或多个,在捕获的组#1中给出我们的最后一个匹配。

你有几件事情要发生。

首先,您需要妥善逃避所有的/秒。 你有大部分,但错过了一对:

(http[s]?:\/\/)?([^\/\s]+\/)+[^\/]+[^\/]+[^\/]+[^\/]\/(?<field1>[^\/]+)\/

从这里开始,您可以连续使用“1个或更多不是/”的数量:

[^\/]+[^\/]+[^\/]+ ==> [^\/]{3,}

但这不是你想要做的,你的意思是有很多“非/”后跟一个“/”,根据你的例子,在使用你的命名捕获组之前你想要它6次。

([^\/]+\/){6}

这是有效的:

http[s]?:\/\/([^\/]+\/){6}(?<field1>[^\/]+)\/

你可以在这里看到它: https//regex101.com/r/kkqwRJ/2

import re
print re.search(r'.*/([^/]+)/.*',s).group(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM