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