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'')
,但未找到链接。