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

歡迎訪問 生活随笔!

生活随笔

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

python

python模块的分类有哪些_python之模块分类(六)

發(fā)布時間:2025/3/15 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模块的分类有哪些_python之模块分类(六) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概念

re模塊是python獨有的匹配字符串的模塊,該模塊中提供的很多功能是基于正則表達式實現(xiàn)的,而正則表達式是對字符串進行模糊匹配,提取自己需要的字符串部分,他對所有的語言都通用。注意:

re模塊是python獨有的

正則表達式所有編程語言都可以使用

re模塊、正則表達式是對字符串進行操作

二、常用正則表達式符號

'.' 默認(rèn)匹配除\n之外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行

'^' 匹配字符開頭,若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

'$' 匹配字符結(jié)尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以

'*' 匹配*號前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 結(jié)果為['abb', 'ab', 'a']

'+' 匹配前一個字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 結(jié)果['ab', 'abb']

'?' 匹配前一個字符1次或0次

'{m}' 匹配前一個字符m次

'{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結(jié)果'abb', 'ab', 'abb']

'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結(jié)果'ABC'

'(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結(jié)果 abcabca456c

'\A' 只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的

'\Z' 匹配字符結(jié)尾,同$

'\d' 匹配數(shù)字0-9

'\D' 匹配非數(shù)字

'\w' 匹配[A-Za-z0-9]

'\W' 匹配非[A-Za-z0-9]

's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結(jié)果 '\t'

'(?P...)' 分組匹配 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{4})","371481199306143242").groupdict("city") 結(jié)果{'province': '3714', 'city': '81', 'birthday': '1993'}

三、常用方法

1、re.compile(pattern,flags = 0 )

將正則表達式模式編譯為正則表達式對象,可使用match(),search()以及下面所述的其他方法將其用于匹配

#Author:Anliu

import re

#res = re.match("^Chen","Chenrunrun123")

#print(res)

#print(res.group())

prog = re.compile('\d{2}') #定義正則對象,(匹配兩個數(shù)字)

print(prog.search("12bbc").group()) #通過調(diào)用group()方法得到匹配的字符串,如果字符串沒有匹配。則返回None、

print(prog.search("wwww.123.com").group())

2、re.search(pattern,string,flags = 0 )

掃描字符串以查找正則表達式模式產(chǎn)生匹配項的第一個位置 ,然后返回相應(yīng)的match對象。None如果字符串中沒有位置與模式匹配,則返回;否則返回false。請注意,這與在字符串中的某個點找到零長度匹配不同。

#在字符串中匹配

print(re.search('\w+','abcde').group())

print(re.search('a','bcdea').group())

3、re.match(pattern,string,flags = 0 )

如果字符串開頭的零個或多個字符與正則表達式模式匹配,則返回相應(yīng)的匹配對象。None如果字符串與模式不匹配,則返回;否則返回false。請注意,這與零長度匹配不同。

#Author:Anliu

import re

#同search,不過在字符串開始處進行了匹配,只會匹配一個對象

print(re.search('a','absabc').group())

print(re.match('a','absabc').group())

print(re.search('\D+','abc123com').group()) #非數(shù)字

print(re.match('\D+','abc123com').group())

print(re.search('\d+','abc123com').group())

#print(re.match('\d+','abc123com').group()) #match報錯

4、re.fullmatch(pattern,string,flags = 0 )

如果整個字符串與正則表達式模式匹配,則返回相應(yīng)的match對象。None如果字符串與模式不匹配,則返回;否則返回false。請注意,這與零長度匹配不同。

print(re.fullmatch('\w+',"abc123").group())

#print(re.fullmatch('abc','abcd').group()) #報錯

print(re.fullmatch('abcd','abcd').group())

5、re.split(pattern,string,maxsplit = 0,flags = 0 )

通過出現(xiàn)模式來拆分字符串。如果在pattern中使用了捕獲括號,那么模式中所有組的文本也將作為結(jié)果列表的一部分返回。如果maxsplit不為零,則最多會發(fā)生maxsplit分割,并將字符串的其余部分作為列表的最后一個元素返回。

print(re.split('[ab]','abcd')) #先按‘a(chǎn)’分割得到‘’和‘bcd’,在對‘’和‘bcd’分別按‘b’分割

print(re.split(r'\W+','Words,words,words.'))

print(re.split(r'(\W+)','Words,words,words.'))

print(re.split('[a-f]+','0a3B9',flags=re.IGNORECASE))

6、re.findall(pattern,string,flags = 0 )

以string列表形式返回string中pattern的所有非重疊匹配項。從左到右掃描該字符串,并以找到的順序返回匹配項。如果該模式中存在一個或多個組,則返回一個組列表;否則,返回一個列表。如果模式包含多個組,則這將是一個元組列表。空匹配項包含在結(jié)果中。

print(re.findall('a','This is a tast from a!'))

結(jié)果:

['a', 'a', 'a']

7、re.finditer(pattern,string,flags = 0 )

返回一個迭代器,該迭代器在string類型的RE 模式的所有非重疊匹配中產(chǎn)生匹配對象。 從左到右掃描該字符串,并以找到的順序返回匹配項。空匹配項包含在結(jié)果中。

a = re.finditer('[ab]','This is a tast from a!') #返回迭代器對象

for i in a:

print(i.group())

8、re.sub(pattern,repl,string,count = 0,flags = 0 )

返回通過用替換repl替換字符串中最左邊的不重疊模式所獲得的字符串。如果找不到該模式, 則返回的字符串不變。 repl可以是字符串或函數(shù);如果是字符串,則處理其中的任何反斜杠轉(zhuǎn)義。即,將其轉(zhuǎn)換為單個換行符,將其轉(zhuǎn)換為回車,依此類推。count參數(shù)表示將匹配到的內(nèi)容進行替換的次數(shù)。

print(re.sub('\d','S','abc12kkakla1wk21',2)) #將匹配到的數(shù)字替換成s,替換2個

9、re.subn(pattern,repl,string,count = 0,flags = 0 )

執(zhí)行與相同的操作sub(),但返回一個元組。(new_string, number_of_subs_made)。

有的時候我們需要使用一些特殊符號如”$ * . ^”等的原意,有時候需要被轉(zhuǎn)義后的功能,并且轉(zhuǎn)義字符地使用很繁瑣,容易出錯。

re.escape(pattern) 可以對字符串中所有可能被解釋為正則運算符的字符進行轉(zhuǎn)義的應(yīng)用函數(shù)。如果字符串很長且包含很多特殊技字符,而你又不想輸入一大堆反斜杠,或者字符串來自于用戶(比如通過raw_input函數(shù)獲取輸入的內(nèi)容),且要用作正則表達式的一部分的時候,可以使用這個函數(shù)。

print(re.escape('www.python.org'))

print(re.findall(re.escape('w.py'),"jw.py w.py.f"))

結(jié)果:

www\.python\.org

['w.py', 'w.py']

四、實例

(1)查找"http://www.python.org"中的python并替換為java

#Author:Anliu

import re

line = "http://www.python.org"

pat = "(?<=\.).+(?=\.)"

patobj = re.compile(pat)

print(re.search(pat,line))

print(re.search(patobj,line))

print(patobj.search(line))

'''

函數(shù)re.search在給定字符串中查找第一個與指定pat匹配的子串,如果找到將返回MatchObject(結(jié)果為True),否則為None.(結(jié)果為False)

觀察結(jié)果,發(fā)現(xiàn)MatchObject的匹配子串為'python',起始與終止位置為11,17

'''

line1 = re.sub(pat,'java',line)

line2 = patobj.sub('java',line)

print(line1)

print(line2)

'''

函數(shù)re.match嘗試在給定字符串開頭查找與正則表達式匹配的子串,和re.search相似,如果找到這樣的子串,返回MatchObject,否則返回None

另外,re.match在模式與字符串開頭匹配時就返回True,而不要求與整個字符串匹配,如果要求完全匹配,需要在模式末尾加上$,從而將匹配檢查延伸到整個字符串.

'''

(2)找出以http協(xié)議開頭的網(wǎng)址

#Author:Anliu

import re

#方法一

#line1 = "http://www.python.com"

#line2 = "ftp://www.python.com"

#pat = "^http.*"

#patobj = re.compile(pat)

##print(re.search(patobj,line))

#print(patobj.search(line1))

#print(patobj.search(line2))

#方法二:

line1 = "http://www.python.com"

line2 = "ftp://www.python.com"

pat = "http.*"

patobj = re.compile(pat)

print(patobj.match(line1))

print(patobj.match(line2))

總結(jié)

以上是生活随笔為你收集整理的python模块的分类有哪些_python之模块分类(六)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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