Python爬虫学习笔记(三)——正则表达式
介紹
正則表達(dá)式是一種處理字符串的強(qiáng)大工具,能實(shí)現(xiàn)字符串的檢索、替換、匹配驗(yàn)證等。在爬蟲中,正則表達(dá)式主要用于從HTML里提取所需要的信息
常用的匹配規(guī)則
| \w | 匹配字母、數(shù)字及下劃線 |
| \W | 匹配不是字母、數(shù)字及下劃線的字符 |
| \s | 匹配任意空白字符,等價(jià)于[\t\n\r\f] |
| \S | 匹配任意非空字符 |
| \d | 匹配任意數(shù)字,等價(jià)于[0-9] |
| \D | 匹配任意非數(shù)字的字符 |
| \A | 匹配字符串開頭 |
| \Z | 匹配字符串結(jié)尾,如果存在換行,只匹配到換行前的結(jié)束字符串 |
| \z | 匹配字符串結(jié)尾,如果存在換行,同時(shí)還會(huì)匹配換行符 |
| \G | 匹配最后匹配完成的位置 |
| \n | 匹配一個(gè)換行符 |
| \t | 匹配一一個(gè)制表符 |
| ^ | 匹配一行字符串的開頭 |
| $ | 匹配一行字符串的結(jié)尾 |
| . | 匹配任意字符,除了換行符,當(dāng)re.DOTALL 標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符 |
| [...] | 用來(lái)表示一一組字符,單獨(dú)列出,比如[amk]匹配a、 m或k |
| [^...] | 不在[]中的字符,比如[^abc]匹配除了 a、b、c之外的字符 |
| * | 匹配0個(gè)或多個(gè)表達(dá)式 |
| + | 匹配1個(gè)或多個(gè)表達(dá)式 |
| ? | 匹配0個(gè)或1個(gè)前面的正則表達(dá)式定義的片段,非貪婪方式 |
| {n} | 精確匹配n個(gè)前面的表達(dá)式 |
| {n,m} | 匹配n到m次由前面正則表達(dá)式定義的片段,貪婪方式 |
| a|b | 匹配a或b |
| () | 匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組 |
常用方法
match()
向它傳入要匹配的字符串以及正則表達(dá)式,就可以檢測(cè)這個(gè)正則表達(dá)式是否匹配字符串。這個(gè)方法會(huì)從字符串的起始位置開始匹配,如果不匹配,返回None。因?yàn)樵摲椒ㄔ谑褂脮r(shí)需要考慮開頭的內(nèi)容,這在做匹配時(shí)并不方便,因此更適合用來(lái)判斷某個(gè)字符串是否符合某個(gè)正則表達(dá)式。
示例如下:
上述代碼涉及到貪婪匹配和非貪婪匹配,這個(gè)到后面在介紹
search()
這個(gè)方法與上一個(gè)方法的不同之處在于,它在匹配時(shí)會(huì)掃描整個(gè)字符串,然后返回第一個(gè)成功匹配的結(jié)果。換句話說,正則表達(dá)式是整個(gè)字符串的子串。如果沒有匹配的,就會(huì)返回None。
findall()
search()只能返回第一個(gè)匹配成功的結(jié)果,但有時(shí)候我們需要所有結(jié)果,這時(shí)候就可以用findall()方法了。該方法可以搜索整個(gè)字符串,然后返回匹配正則表達(dá)式的所有內(nèi)容。
sub()
這個(gè)方法主要是用來(lái)修改文本。示例如下:
這里sub()就是把所有的數(shù)字刪除,返回結(jié)果為hjsehidasdf
此外,sub()還可以用來(lái)刪去字符串中干擾匹配的字符,以此來(lái)簡(jiǎn)化匹配
compile()
書上介紹這個(gè)方法可以將正則表達(dá)式編譯成正則表達(dá)式對(duì)象,以便在后面的匹配中復(fù)用。但我不是很理解正則表達(dá)式對(duì)象這一說法,如果單純用字符串存正則表達(dá)式也不是不可以,這個(gè)還有待進(jìn)一步的探究。
其它
貪婪與非貪婪
貪婪匹配模式下,.會(huì)匹配盡可能多的字符,有時(shí)候會(huì)讓匹配少了一部分內(nèi)容。非貪婪模式的寫法就是.?。示例如下:
返回結(jié)果為
7 1234567從這個(gè)代碼中就可以看出貪婪和非貪婪的區(qū)別了
修飾符
正則表達(dá)式可以包含一些可選標(biāo)志修飾符來(lái)控制匹配的模式
| re.I | 使匹配對(duì)大小寫不敏感 |
| re.L | 做本地化識(shí)別匹配 |
| re.M | 多行匹配,影響^和$ |
| re.S | 使.匹配包括換行在內(nèi)的所有字符 |
| re.U | 根據(jù)Unicode字符集解析字符,影響\w、\W、\b和\B |
| re.X | 該標(biāo)志通過給予更靈活的格式以便你將正則表達(dá)式寫得更易于理解 |
轉(zhuǎn)義匹配
正則表達(dá)式定義了許多匹配模式,但如果目標(biāo)字符串里就包含對(duì)應(yīng)語(yǔ)法的字符,就需要用轉(zhuǎn)義匹配了。類似于markdown語(yǔ)法,在所需要轉(zhuǎn)義的字符前加上反斜杠就好。
總結(jié)
正則表達(dá)式是第三章知識(shí)點(diǎn)的最后一節(jié)了,以所學(xué)的內(nèi)容應(yīng)該可以實(shí)現(xiàn)基本爬蟲了。我打算明天做一個(gè)小項(xiàng)目,按照書上的建議,大概是爬取貓眼電影排行榜吧。
轉(zhuǎn)載于:https://www.cnblogs.com/HackHarry/p/9579600.html
總結(jié)
以上是生活随笔為你收集整理的Python爬虫学习笔记(三)——正则表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习Vue.js-Day2
- 下一篇: CentOS7 Zabbix3.4安装