Python正則表達(dá)中re模塊的使用
01、正則表達(dá)式
學(xué)習(xí)正則表達(dá)式操作字符串,re模塊是用C語(yǔ)言寫的沒(méi)匹配速度非??欤渲衏ompile函數(shù)根據(jù)一個(gè)模式字符串和可選的標(biāo)志參數(shù)生成一個(gè)正則表達(dá)式對(duì)象,該對(duì)象擁有一系列方法用于正則表大會(huì)匹配和替換,re模塊也提供了與這下方法功能完全一致的函數(shù),這些函數(shù)適用一個(gè)模式字符串做為他們的第一個(gè)參數(shù)
re.macth方法:re.math 嘗試從字符串起始位置匹配,返回match對(duì)象,,否則返回None,適用group()獲取匹配成功的字符串
語(yǔ)法:re.match(pattern,string,flags)
參數(shù)描述pattern匹配的正則表達(dá)式string要匹配的字符串flags標(biāo)志位,用于控制正則表達(dá)式的匹配方式:如:是否匹配大小寫,多行匹配
參數(shù) | 描述 |
---|---|
pattern | 匹配的正則表達(dá)式 |
string | 要匹配的字符串 |
flags | 標(biāo)志位,用于控制正則表達(dá)式的匹配方式:如:是否匹配大小寫,多行匹配 |
import re str='Python is the best language in the world' result= re.match('P',str) print(type(result))#<class 're.Match'> print(result.group())
標(biāo)志位:如果使用多個(gè)標(biāo)志位,使用|分割,如:re.I|re.M
修飾符 | 描述 |
---|---|
re.I | 適匹配對(duì)大小寫不敏感 |
re.L | 做本地化識(shí)別匹配 |
re.M | 多行匹配,影響^ 和$ |
re.S | 使.匹配包括換行在內(nèi)的所有字符 |
re.U | 根據(jù)Unicode字符集解析字符,這個(gè)標(biāo)志影響\w,\W ,\b,\B |
re.X | 該標(biāo)識(shí)符通過(guò)給予你更靈活的格式以便于你將正則表達(dá)式寫得更易于理解。 |
import re strData='Python is the best language in the world\ gslfjgldsjgls' #result= re.match('p',strData,re.I|re.M)#第三個(gè)參數(shù) 忽略大小寫 #print(type(result))#<class 're.Match'> #print(result.group()) res=re.match('(.*?)is(.*?)',strData,re.I) print(res.group(1)) print(res.group(2))
常用匹配規(guī)則:
符號(hào) | 匹配規(guī)則 |
---|---|
.(點(diǎn)) | 匹配任意1個(gè)字符除了換行符 |
[abc] | 匹配abc中任意一個(gè) |
\d | 匹配一個(gè)數(shù)字0-9 |
\D | 匹配非數(shù)字 |
\s | 匹配空白 即空格 tab鍵 |
\S | 匹配非空格 |
\w | 匹配單詞字符 即a-z A-Z 0-9 _ |
\W | 匹配非單詞字符 |
匹配字符數(shù)量:
符號(hào) | 匹配規(guī)則 |
---|---|
* | 匹配前一個(gè)字符出現(xiàn)0次或者無(wú)限次,即可有可無(wú) |
+ | 匹配前一個(gè)字符出現(xiàn)1次或者無(wú)限次,即至少有1次 |
? | 匹配前一個(gè)字符出現(xiàn)1次或者0次,即要么有1次要么沒(méi)有 |
{m} | 匹配前一個(gè)字符出現(xiàn)m次 |
{m,} | 匹配前一個(gè)字符至少出現(xiàn)m次 |
{m,n} | 匹配前一個(gè)字符出現(xiàn)從m次到n次 |
1.1、限定匹配數(shù)量規(guī)則
import re # * 匹配前一個(gè)字符出現(xiàn)0次或者無(wú)限次 res=re.match('[a-z][a-z]*','MyPython',re.I) print(res.group()) # + 匹配前一個(gè)字符1次或者無(wú)限次 至少一次 res=re.match('[a-zA-Z]+[\w]*','mynAMEDCeisz848s_') print(res.group()) # ? 匹配前一個(gè)字符0次或者1次 res=re.match('[a-zA-Z]+[\d]?','mkohjhjgu8jg8') print(res.group()) # {min,max} 匹配前一個(gè)從min到max次 min max必須是非負(fù)整數(shù) #{count}精確匹配次數(shù) {count,}沒(méi)有限制 res=re.match('\d{4,}','46145') if res: print('匹配成功{}'.format(res.group())) #匹配郵箱 格式:xxxxxx@163.com res=re.match('[a-zA-Z0-9]{6,11}@163.com','318129549@163.com') print(res.group())
1.2、原生字符串
# path="D:\\1_zhao_File\\1_MarkDown\MarkDown學(xué)習(xí)使用篇" # print(path ) import re #原生字符串 r print(re.match(r'c:\\a.text','c:\\a.text').group()) #匹配開(kāi)頭結(jié)尾 #^ 匹配字符串開(kāi)頭 #$ 匹配字符串結(jié)尾 # res=re.match('^p.*','python is language') res=re.match('^p[\w]{5}','python is language') print(res.group()) res=re.match('[\w]{5,15}@[\w]{2,5}.com$','318129549@qq.com') print(res.group())
1.3、分組匹配
# | 匹配左右任意一個(gè)表達(dá)式 從左往右 import re res=re.match('[\w]*|100','100') print(res.group()) # (ab)分組匹配 將括號(hào)中字符作為一個(gè)分組 res=re.match('([0-9]*)-(\d*)','123456-464651561') print(res.group()) print(res.group(1)) print(res.group(2)) # \num 的使用 # htmlTag='<html><h1>Python核心編程</h1></html>' # res1=re.match(r'<(.+)>(.+)>(.+)</\2></\1>',htmlTag) # print(res1.group(1)) # 分組 別名的使用 (?P<名字>) data='<div><h1>www.baidu.com</h1></div>' res=re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>(?P<data>.*)</\w*></\w*>',data) print(res.group())
1.4、編譯函數(shù)compile
# re.compile 方法 ''' compile將正則表達(dá)式模式編譯成一個(gè)正則表達(dá)式對(duì)象 reg=re.compile(pattern) result=reg.match(string) 等效于result=re.match(pattern,string) 使用re.compile和保持所產(chǎn)生的正則表達(dá)式對(duì)象重用效率更高 ''' import re #compile 可以把字符串編譯成字節(jié)碼 #優(yōu)點(diǎn):在使用正則表達(dá)式進(jìn)行match時(shí),python會(huì)將字符串轉(zhuǎn)為正則表達(dá)式對(duì)象 # 而如果使用compile,只需要轉(zhuǎn)換一次即可,以后在使用模式對(duì)象的話無(wú)需重復(fù)轉(zhuǎn)換 data='1364' pattern=re.compile('.*') #使用pattern對(duì)象 res=pattern.match(data) print(res.group()) #re.search方法 #search在全文中匹配一次,匹配到就返回 data='我愛(ài)我偉大的祖國(guó),I love China,China is a great country' rees=re.search('China',data) print(rees) print(rees.span()) print(rees.group()) # print(data[21]) #re.findall方法 匹配所有,返回一個(gè)列表, data='華為牛逼是華人的驕傲' # res =re.findall('華.',data) # print(res) pattern=re.compile('華.') res=pattern.findall(data) print(res) # re.sub方法 實(shí)現(xiàn)目標(biāo)搜索和替換 data1='Pythons是很受歡迎的編程語(yǔ)言' pattern='[a-zA-Z]+' #字符集范圍 +代表 前導(dǎo)字符模式出現(xiàn)1從以上 res=re.sub(pattern,'C#',data1) resn=re.subn(pattern,'C#',data1) print(res) print(resn) #re.subn 完成目標(biāo)的的搜索和替換 還返回被替換的數(shù)量,以元組的形式返回 #re.split 是新分割字符串 data='百度,騰訊,阿里,華為,360,字節(jié)跳動(dòng)' print(re.split(',',data))
1.5貪婪模式和非貪婪模式
''' python 中默認(rèn)是貪婪的,總是貪婪的匹配盡可能多的字符,非貪婪相反,總是嘗試匹配盡可能少的字符 在 ” * ? + {m,n}"后面加上 ? 使貪婪變成非貪婪 ''' #貪婪 import re res=re.match('[\d]{6,9}','111222333') print(res.group()) #非貪婪 res=re.match('[\d]{6,9}?','111222333') print(res.group()) content='asdfbsdbdsabsd' # pattern=re.compile('a.*b')# 貪婪 pattern=re.compile('a.*?b')#非貪婪 res=pattern.search(content) print(res.group()) #0710-49
到此這篇關(guān)于Python正則表達(dá)中re模塊的使用的文章就介紹到這了,更多相關(guān)Python re模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python muggle_ocr庫(kù)用法及實(shí)例代碼
在本篇文章里小編給大家整理的是一篇關(guān)于python muggle_ocr庫(kù)用法及實(shí)例代碼內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07Python使用Pygame實(shí)現(xiàn)時(shí)鐘效果
這篇文章主要為大家詳細(xì)介紹了Python使用Pygame實(shí)現(xiàn)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Python命令行參數(shù)解析模塊getopt使用實(shí)例
這篇文章主要介紹了Python命令行參數(shù)解析模塊getopt使用實(shí)例,本文講解了使用語(yǔ)法格式、短選項(xiàng)參數(shù)實(shí)例、長(zhǎng)選項(xiàng)參數(shù)實(shí)例等內(nèi)容,需要的朋友可以參考下2015-04-04詳解HttpRunner3的HTTP請(qǐng)是如何發(fā)出
這篇文章主要為大家介紹了HttpRunner3的HTTP請(qǐng)是如何發(fā)出詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07plt.title()中文無(wú)法顯示的問(wèn)題解決
本文主要介紹了plt.title()中文無(wú)法顯示的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04