Python 如何匹配此url的正则表达式?

Python 如何匹配此url的正则表达式?,python,regex,web-scraping,Python,Regex,Web Scraping,我有这个网址 http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar “download”之后的数字是随机生成的,“mysite.com”之后的两个目录会为每个文件获取随机字符串 我尝试使用(\.rar$)查找文件扩展名以下载文件,但问题是该页面上的其他链接的URL以.rar文件结尾,而不是实际的下载链接。因此,通过扩展查找下载链接在这里没有帮助。我需要下面这样的图案 http://download\[rand

我有这个网址

http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar

“download”之后的数字是随机生成的,“mysite.com”之后的两个目录会为每个文件获取随机字符串

我尝试使用
(\.rar$)
查找文件扩展名以下载文件,但问题是该页面上的其他链接的URL以.rar文件结尾,而不是实际的下载链接。因此,通过扩展查找下载链接在这里没有帮助。我需要下面这样的图案


http://download\[random\u no\u here\].mysite.com/\[randomstring\u number\u included\u here/\[另一个\u randomstring\u带有\u number\u included\u here\u实际文件\u带有\u random\u name.rar
此正则表达式将执行您想要的操作:

r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar'
\d
匹配数字,
\w
匹配字母数字(包括下划线);
+
表示匹配前面的一个或多个模式。我们在
.com
.rar
前面使用
以使
按字面解释,而不是作为正则表达式通配符

测试

import re

p = re.compile(r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar')

table = [
    'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar',
    'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw',
    'http://download123.mysite.com/456/789/upload.rar',
    'http://downloadabc.mysite.com/def/ghi/upload.rar',
    'http://download1234.mysite.com/def/ghi/upload.rar',
    'http://download1234.mysite.org/def/ghi/upload.rar',
]

for s in table:
    m = p.match(s)
    print s, m is not None
http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar True
http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw False
http://download123.mysite.com/456/789/upload.rar True
http://downloadabc.mysite.com/def/ghi/upload.rar False
http://download1234.mysite.com/def/ghi/upload.rar True
http://download1234.mysite.org/def/ghi/upload.rar False
输出

import re

p = re.compile(r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar')

table = [
    'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar',
    'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw',
    'http://download123.mysite.com/456/789/upload.rar',
    'http://downloadabc.mysite.com/def/ghi/upload.rar',
    'http://download1234.mysite.com/def/ghi/upload.rar',
    'http://download1234.mysite.org/def/ghi/upload.rar',
]

for s in table:
    m = p.match(s)
    print s, m is not None
http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar True
http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw False
http://download123.mysite.com/456/789/upload.rar True
http://downloadabc.mysite.com/def/ghi/upload.rar False
http://download1234.mysite.com/def/ghi/upload.rar True
http://download1234.mysite.org/def/ghi/upload.rar False

如果实际文件名不同,则可以使用

r'http://download\d+\.mysite\.com/\w+/\w+/\w+\.rar'

如果名称始终为小写字母



顺便说一句,通常是这样的,但是如果页面格式是固定的,并且相当简单,您可能可以不受影响。

我用它来查找python和beautifulsoup中的链接。
link2=soup2.findAll(href=re.compile(“”)http://download\d+\.mysite\.com/\w+/\w+/[a-z]+\.rar'')
,但未找到链接。