如何提取文本“ .html”之前的一连串数字?

时间:2018-10-16 12:52:59

标签: python regex

我很难找到一个正则表达式来从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") 

但是,并非所有情况都匹配。如何修复我的正则表达式?

2 个答案:

答案 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']