我有这个网址:
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
。
这是我的正确文本:
pattern = '(http[s]?:\/\/)?([^\/\s]+\/)+[^/]+[^/]+[^/]+[^/]/(?<field1>[^/]+)/'
但这是错的!
我的错误是什么?
答案 0 :(得分:2)
你可以在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}
将匹配任意非正斜杠中的1个或多个以及/
7次,这将为我们在捕获的组#1中的最后一场比赛。
答案 1 :(得分:1)
你有几件事情在发生。
首先,您需要正确地逃避所有/
。你已经掌握了大部分,但错过了一对夫妇:
(http[s]?:\/\/)?([^\/\s]+\/)+[^\/]+[^\/]+[^\/]+[^\/]\/(?<field1>[^\/]+)\/
从这里,你有一些&#34; 1或更多不是/&#34;连续可以减少:
[^\/]+[^\/]+[^\/]+ ==> [^\/]{3,}
但那不是你想要做的,你的意思是有很多块&#34;非/&#34;然后是&#34; /&#34;并且根据您的示例,在使用命名捕获组之前,您需要6次。
([^\/]+\/){6}
以下是有效的:
http[s]?:\/\/([^\/]+\/){6}(?<field1>[^\/]+)\/
你可以在这里看到它:https://regex101.com/r/kkqwRJ/2
答案 2 :(得分:0)
import re
print re.search(r'.*/([^/]+)/.*',s).group(1)