免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python截圖文字識別工具
  1. 正則表達(dá)式語法
    1.1 字符與字符類

學(xué)習(xí)python中有什么不懂的地方,小編這里推薦加小編的python學(xué)習(xí)群:895 797 751有任何不懂的都可以在里面交流,還有很好的視頻教程pdf學(xué)習(xí)資料,大家一起學(xué)習(xí)交流!

1 特殊字符:.^$?+*{}|

以上特殊字符要想使用字面值,必須使用進(jìn)行轉(zhuǎn)義

2 字符類

包含在[]中的一個或者多個字符被稱為字符類,字符類在匹配時如果沒有指定量詞則只會匹配其中的一個。

字符類內(nèi)可以指定范圍,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之間的任何一個字符

左方括號后跟隨一個,表示否定一個字符類,比如[0-9]表示可以匹配一個任意非數(shù)字的字符。

字符類內(nèi)部,除了之外,其他特殊字符不再具備特殊意義,都表示字面值。放在第一個位置表示否定,放在其他位置表示本身,-放在中間表示范圍,放在字符類中的第一個字符,則表示-本身。

字符類內(nèi)部可以使用速記法,比如d s w

3 速記法

. 可以匹配除換行符之外的任何字符,如果有re.DOTALL標(biāo)志,則匹配任意字符包括換行

d匹配一個Unicode數(shù)字,如果帶re.ASCII,則匹配0-9

D 匹配Unicode非數(shù)字

s匹配Unicode空白,如果帶有re.ASCII,則匹配中的一個

S 匹配Unicode非空白

w匹配Unicode單詞字符,如果帶有re.ascii,則匹配[a-zA-Z0-9_]中的一個

W 匹配Unicode非單子字符

1.2 量詞

?匹配前面的字符0次或1次

*匹配前面的字符0次或多次

+匹配前面的字符1次或者多次

{m}匹配前面表達(dá)式m次

{m,}匹配前面表達(dá)式至少m次

{,n}匹配前面的正則表達(dá)式最多n次

{m,n}匹配前面的正則表達(dá)式至少m次,最多n次

注意點(diǎn):

以上量詞都是貪婪模式,會盡可能多的匹配,如果要改為非貪婪模式,通過在量詞后面跟隨一個?來實(shí)現(xiàn)

1.3 組與捕獲

1 ()的作用:

捕獲()中正則表達(dá)式的內(nèi)容以備進(jìn)一步利用處理,可以通過在左括號后面跟隨?:來關(guān)閉這個括號的捕獲功能

將正則表達(dá)式的一部分內(nèi)容進(jìn)行組合,以便使用量詞或者|

2 反響引用前面()內(nèi)捕獲的內(nèi)容:

通過組號反向引用
每一個沒有使用?:的小括號都會分配一個組好,從1開始,從左到右遞增,可以通過i引用前面()內(nèi)表達(dá)式捕獲的內(nèi)容

通過組名反向引用前面小括號內(nèi)捕獲的內(nèi)容
可以通過在左括號后面跟隨?P,尖括號中放入組名來為一個組起一個別名,后面通過(?P=name)來引用 前面捕獲的內(nèi)容。如(? Pw+)s+(?P=word)來匹配重復(fù)的單詞。

3 注意點(diǎn):

反向引用不能放在字符類[]中使用。

1.4 斷言與標(biāo)記

斷言不會匹配任何文本,只是對斷言所在的文本施加某些約束

1 常用斷言:

匹配單詞的邊界,放在字符類[]中則表示backspace

B 匹配非單詞邊界,受ASCII標(biāo)記影響

A 在起始處匹配

^在起始處匹配,如果有MULTILINE標(biāo)志,則在每個換行符后匹配

Z 在結(jié)尾處匹配

$在結(jié)尾處匹配,如果有MULTILINE標(biāo)志,則在每個換行符前匹配

(?=e)正前瞻

(?!e)負(fù)前瞻

(?<=e)正回顧

10.(?<!e)負(fù)回顧

2 前瞻回顧的解釋

前瞻: exp1(?=exp2) exp1后面的內(nèi)容要匹配exp2

負(fù)前瞻: exp1(?!exp2) exp1后面的內(nèi)容不能匹配exp2

后顧: (?<=exp2)exp1 exp1前面的內(nèi)容要匹配exp2

負(fù)后顧: (?<!exp2)exp1 exp1前面的內(nèi)容不能匹配exp2

例如:我們要查找hello,但是hello后面必須是world,正則表達(dá)式可以這樣寫:'(hello)s+(?=world)',用來匹配'hello wangxing'和'hello world'只能匹配到后者的hello

1.5 條件匹配

(?(id)yes_exp|no_exp):對應(yīng)id的子表達(dá)式如果匹配到內(nèi)容,則這里匹配yes_exp,否則匹配no_exp

1.6 正則表達(dá)式的標(biāo)志

正則表達(dá)式的標(biāo)志有兩種使用方法

通過給compile方法傳入標(biāo)志參數(shù),多個標(biāo)志使用|分割的方法,如re.compile(r'#[da-f]{6}', re.IGNORECASE|re.MULTILINE)

通過在正則表達(dá)式前面添加(?標(biāo)志)的方法給正則表達(dá)式添加標(biāo)志,如(?ms)#[da-z]{6}

常用的標(biāo)志

re.A或者re.ASCII, 使 B s S w W d D都假定字符串為假定字符串為ASCII

re.I或者re.IGNORECASE使正則表達(dá)式忽略大小寫

re.M或者re.MULTILINE 多行匹配,使每個^在每個回車后,每個$在每個回車前匹配

re.S或者re.DOTALL 使.能匹配任意字符,包括回車

re.X或者re.VERBOSE 這樣可以在正則表達(dá)式跨越多行,也可以添加注釋,但是空白需要使用s或者[ ]來表示,因?yàn)槟J(rèn)的空白不再解釋。如:

re.compile(r'''

<imgs +)#標(biāo)簽的開始

[^>]*?#不是src的屬性

src=#src屬性的開始

(?:

(?P['’])#左引號

(?P<image_name>[^>]+?)#圖片名字

(?P=quote)#右括號

“”',re.VERBOSE|re.IGNORECASE)

Python正則表達(dá)式模塊
2.1 正則表達(dá)式處理字符串主要有四大功能

匹配 查看一個字符串是否符合正則表達(dá)式的語法,一般返回true或者false

獲取正則表達(dá)式來提取字符串中符合要求的文本

替換查找字符串中符合正則表達(dá)式的文本,并用相應(yīng)的字符串替換

分割使用正則表達(dá)式對字符串進(jìn)行分割。

2.2 Python中re模塊使用正則表達(dá)式的兩種方法

使用re.compile(r, f)方法生成正則表達(dá)式對象,然后調(diào)用正則表達(dá)式對象的相應(yīng)方法。這種做法的好處是生成正則對象之后可以多次使用。

re模塊中對正則表達(dá)式對象的每個對象方法都有一個對應(yīng)的模塊方法,唯一不同的是傳入的第一個參數(shù)是正則表達(dá)式字符串。此種方法適合于只使用一次的正則表達(dá)式。

2.3 正則表達(dá)式對象的常用方法

rx.findall(s,start, end):
返回一個列表,如果正則表達(dá)式中沒有分組,則列表中包含的是所有匹配的內(nèi)容,

如果正則表達(dá)式中有分組,則列表中的每個元素是一個元組,元組中包含子分組中匹配到的內(nèi)容,但是沒有返回整個正則表達(dá)式匹配的內(nèi)容

rx.finditer(s, start, end):
返回一個可迭代對象

對可迭代對象進(jìn)行迭代,每一次返回一個匹配對象,可以調(diào)用匹配對象的group()方法查看指定組匹配到的內(nèi)容,0表示整個正則表達(dá)式匹配到的內(nèi)容

rx.search(s, start, end):
返回一個匹配對象,倘若沒匹配到,就返回None

search方法只匹配一次就停止,不會繼續(xù)往后匹配

rx.match(s, start, end):
如果正則表達(dá)式在字符串的起始處匹配,就返回一個匹配對象,否則返回None

rx.sub(x, s, m):
返回一個字符串。每一個匹配的地方用x進(jìn)行替換,返回替換后的字符串,如果指定m,則最多替換m次。對于x可以使用/i或者/gid可以是組名或者編號來引用捕獲到的內(nèi)容。

模塊方法re.sub(r, x, s, m)中的x可以使用一個函數(shù)。此時我們就可以對捕獲到的內(nèi)容推過這個函數(shù)進(jìn)行處理后再替換匹配到的文本。

rx.subn(x, s, m):
與re.sub()方法相同,區(qū)別在于返回的是二元組,其中一項(xiàng)是結(jié)果字符串,一項(xiàng)是做替換的個數(shù)。

rx.split(s, m):分割字符串
返回一個列表

用正則表達(dá)式匹配到的內(nèi)容對字符串進(jìn)行分割

如果正則表達(dá)式中存在分組,則把分組匹配到的內(nèi)容放在列表中每兩個分割的中間作為列表的一部分,如:

rx = re.compile(r'(d)[a-z]+(d)')

s = “ab12dk3klj8jk9jks5”

result = rx.split(s)

返回[‘a(chǎn)b1’, ‘2’, ‘3’, ‘klj’, ‘8’, ‘9’, ‘jks5’]

rx.flags():正則表達(dá)式編譯時設(shè)置的標(biāo)志

rx.pattern():正則表達(dá)式編譯時使用的字符串

2.4 匹配對象的屬性與方法

m.group(g, …)
返回編號或者組名匹配到的內(nèi)容,默認(rèn)或者0表示整個表達(dá)式匹配到的內(nèi)容,如果指定多個,就返回一個元組

m.groupdict(default)
返回一個字典。字典的鍵是所有命名的組的組名,值為命名組捕獲到的內(nèi)容

如果有default參數(shù),則將其作為那些沒有參與匹配的組的默認(rèn)值。

m.groups(default)
返回一個元組。包含所有捕獲到內(nèi)容的子分組,從1開始,如果指定了default值,則這個值作為那些沒有捕獲到內(nèi)容的組的值

m.lastgroup()
匹配到內(nèi)容的編號最高的捕獲組的名稱,如果沒有或者沒有使用名稱則返回None(不常用)

m.lastindex()
匹配到內(nèi)容的編號最高的捕獲組的編號,如果沒有就返回None。

m.start(g):
當(dāng)前匹配對象的子分組是從字符串的那個位置開始匹配的,如果當(dāng)前組沒有參與匹配就返回-1

m.end(g)
當(dāng)前匹配對象的子分組是從字符串的那個位置匹配結(jié)束的,如果當(dāng)前組沒有參與匹配就返回-1

m.span()
返回一個二元組,內(nèi)容分別是m.start(g)和m.end(g)的返回值

m.re()
產(chǎn)生這一匹配對象的正則表達(dá)式

m.string()
傳遞給match或者search用于匹配的字符串

m.pos()
搜索的起始位置。即字符串的開頭,或者start指定的位置(不常用)

m.endpos()
搜索的結(jié)束位置。即字符串的末尾位置,或者end指定的位置(不常用)

2.5 總結(jié)

對于正則表達(dá)式的匹配功能,Python沒有返回true和false的方法,但可以通過對match或者search方法的返回值是否是None來判斷

對于正則表達(dá)式的搜索功能,如果只搜索一次可以使用search或者match方法返回的匹配對象得到,對于搜索多次可以使用finditer方法返回的可迭代對象來迭代訪問

對于正則表達(dá)式的替換功能,可以使用正則表達(dá)式對象的sub或者subn方法來實(shí)現(xiàn),也可以通過re模塊方法sub或者subn來實(shí)現(xiàn),區(qū)別在于模塊的sub方法的替換文本可以使用一個函數(shù)來生成

對于正則表達(dá)式的分割功能,可以使用正則表達(dá)式對象的split方法,需要注意如果正則表達(dá)式對象有分組的話,分組捕獲的內(nèi)容也會放到返回的列表中

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python3 如何優(yōu)雅地使用正則表達(dá)式(詳解三)
人工智能實(shí)現(xiàn)程序員“防”BOSS?刷臉就發(fā)短信,8行代碼人臉報(bào)警
正則表達(dá)式
QRegExp正則表達(dá)式
python提取字符串中的數(shù)字【正則表達(dá)式用法】
Python學(xué)習(xí)教程:Day12-使用正則表達(dá)式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服