我很难找到一个正则表达式来从URL中提取一串数字(例如56478888)。输入示例:
http://wwww.example/f-1234565-auc56478888.html#his
http://wwww.example/f-1234565-auc56478888.html
http://wwww.example/f-1234565-56478888.html
如您所见,有时在数字链之前有字符,有时在“ .html”之后有字符。
我想到的正则表达式如下:
re.compile(".*?/f\-\d+\-(\d+)\.html")
但是,并非所有情况都匹配。如何修复我的正则表达式?
答案 0 :(得分:0)
尝试模式r"\d{8}"
例如:
import re
s = ["http://wwww.example/f-1234565-auc56478888.html#his", "http://wwww.example/f-1234565-auc56478888.html", "http://wwww.example/f-1234565-56478888.html"]
for i in s:
print(re.findall(r"\d{8}", i)) #8 digits
输出:
['56478888']
['56478888']
['56478888']
答案 1 :(得分:0)
假设您想要第二组数字,可以使用findall:
import re
urls = ["http://wwww.example/f-1234565-auc56478888.html#his",
"http://wwww.example/f-1234565-auc56478888.html",
"http://wwww.example/f-1234565-56478888.html"]
pattern = re.compile("\d+")
print([matches[-1] for matches in map(pattern.findall, urls)])
输出
['56478888', '56478888', '56478888']
模式"\d+"
仅匹配所有数字组。另外,您可以搜索".html"
之前的数字组:
pattern = re.compile("(\d+)\.html")
print([match.group(1) for match in map(pattern.search, urls)])
输出
['56478888', '56478888', '56478888']