Day12 - 正则表示式

在昨天我们建立了模型,并可使用管理网站手动增加书籍与作者的资料。

但回顾 Day10所列的需求,实际使用情境上,使用者只需输入网址,系统需判断是否为可支援网站,并自动抓取书名和作者等资讯。

预计使用技术如下:

  1. 判断是否为可支援网站:正则表示式
  2. 根据URL,抓取书名和作者资讯:爬虫

故在继续Django挑战前,今天将先进行正则表示式的练习,以便後续网站开发使用。

使用正则表示式判断是否为支援网站

正则表示式的比对写法:

import re

regex = re.compile(r'正则表示式')
target = "欲比对的内容"

result = regex.search(target)
  • re.compile(r'正则表示式'):把正则表示式进行编译,并产生一个pattern对象,供後续的search()、find()使用。
    • r'正则表示式':r表示後面的字串为原始字串。因为正则表示式会用到很多系统保留符号,故需宣告为原始字串以免Python执行错误。

大部分找到的教学网站的写法,主要流程都是先将正则表示式进行compile(),後续使用complie产生的物件做search(),但今天刚好看到一篇分享,里面提到其实re模组提供的许多函式中都已包含compile(),故统一事先宣告compile()其实是资源的浪费。

故今天练习的完整程序如下:

import re

# 正则表示式:比对网址pattern,并抓取novelid
regex = r'https?:\/\/www\.jjwxc\.net\/onebook\.php\?novelid=(\d+)'
urlgroup = ( "http://www.jjwxc.net/onebook.php?novelid=3415053",
        "http://www.google.com"
)

for url in urlgroup:
  result = re.search(regex, url)
  if result is None:
    print("Not Match!  URL:" + url)
  else:
    print("Match!")
    print("Group():" + result.group())
    print("Group(1):" + result.group(1))

输出结果:

Match!
Group():http://www.jjwxc.net/onebook.php?novelid=3415053
Group(1):3415053
Not Match!  URL:http://www.google.com

<<:  【没钱买ps,PyQt自己写】Day 9 - 以 QLineEdit, QTextEdit, QPlainTextEdit 作为文字的输入

>>:  我们的基因体时代-AI, Data和生物资讯 Day24- 使用tidyverse观念来分析基因资料:plyranges

Day 21 : Linux - 安装ubuntu的时候视窗太小,按不到下方的继续键怎麽办?

如标题,这篇想教大家如果安装ubuntu的时候,按不到下方的继续键怎麽办 因为Linux的预设解析度...

Day02 - 为什麽你需要 Next.js ?

为什麽你需要 Next.js ? 对於工程师来说选择用什麽样的技术,背後都是取决於商业策略需要什麽...

变更管理和变更控制(Change Management and Change Control)

什麽是变化,我们在变化什麽? 当涉及到更改时,至关重要的是定义什麽是更改并阐明我们正在更改的内容。...

Day 22 中断的运用

在Day 20有稍微提到中断机制,我们稍微深入说明一下,中断其实也是种不浪费资源的方式,如果处理器一...

[Day4] 找出你的受众目标

首先,在开始一个好的设计之前, 如同广告投放一般, 我们需要找出目标受众来设计出更符合他们的对话流程...