[英]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.