日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫学习笔记(三)——正则表达式

發(fā)布時間:2025/3/19 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫学习笔记(三)——正则表达式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

正則表達(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á)式。
示例如下:

import recontent = 'Hello 1234567 World_This is a Regex Demo' result = re.match('^He.*?(\d+).*Demo$',content) print(result.group(1))

上述代碼涉及到貪婪匹配和非貪婪匹配,這個到后面在介紹
search()
這個方法與上一個方法的不同之處在于,它在匹配時會掃描整個字符串,然后返回第一個成功匹配的結(jié)果。換句話說,正則表達(dá)式是整個字符串的子串。如果沒有匹配的,就會返回None。

findall()
search()只能返回第一個匹配成功的結(jié)果,但有時候我們需要所有結(jié)果,這時候就可以用findall()方法了。該方法可以搜索整個字符串,然后返回匹配正則表達(dá)式的所有內(nèi)容。

sub()
這個方法主要是用來修改文本。示例如下:

import recontent = 'fgah32jsehi543dasdf342' content = re.sub('\d+\, '', content) print(content)

這里sub()就是把所有的數(shù)字刪除,返回結(jié)果為hjsehidasdf
此外,sub()還可以用來刪去字符串中干擾匹配的字符,以此來簡化匹配
compile()
書上介紹這個方法可以將正則表達(dá)式編譯成正則表達(dá)式對象,以便在后面的匹配中復(fù)用。但我不是很理解正則表達(dá)式對象這一說法,如果單純用字符串存正則表達(dá)式也不是不可以,這個還有待進(jìn)一步的探究。

其它

貪婪與非貪婪
貪婪匹配模式下,.會匹配盡可能多的字符,有時候會讓匹配少了一部分內(nèi)容。非貪婪模式的寫法就是.?。示例如下:

import recontent = 'Hello 1234567 World_This is a Regex Demo' regex = '^He.*?(\d+).*Demo$' result1 = re.match('^He.*(\d+).*Demo$', content) result2 = re.match('^He.*?(\d+).*Demo$', content) print(result1.group(1)) print(result2.group(1))

返回結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。