Python模块学习 ---- re正则表达式
re模塊
Python自帶了匹配字符串的模塊re,我們可以通過該模塊對字符串進行(模糊)匹配,提取出我們需要的內(nèi)容。
re模塊中很多功能都是基于正則表達式實現(xiàn)的。正則表達式是一種特殊的字符序列,它能幫助我們?nèi)z查字符串是否與某種模式相匹配。
常用方法
1、re.compile(pattern, flags=0)
將正則表達式編譯成正則對象,搭配match、search、findall等等進行匹配。
import re prog = re.compile('[abc]') # 匹配字符集abc與字符串匹配的第一個字符。 print(prog.search('abcd').group()) # a2、re.match(pattern, string, flags=0)
從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
import re # \w 用來匹配單次字符 包括a-z A-Z 0-9 _ r = re.match('h\w+', 'how are you') # 獲取匹配到的結(jié)果 print(r.group()) # how r = re.match('h(\w+)', 'how are you') # groups 獲取模型中匹配到的結(jié)果,返回匹配到的字符串的分組部分 print(r.groups()) # ('ow',) # 引用別名word1、word2,它們相當于key,value就是匹配到的內(nèi)容。 r = re.match('(?P<word1>h)(?P<word2>\w+)', 'how are you') print(r.group()) # how print(r.groups()) # ('h', 'ow') print(r.groupdict()) # {'word1': 'h', 'word2': 'ow'}3、re.search(pattern, string, flags=0)
掃描整個字符串,返回第一個成功的匹配,如果匹配失敗,返回None。
import re # \w 用來匹配單次字符 包括a-z A-Z 0-9 _ r = re.search('a\w+', 'how are you') # 獲取匹配到的結(jié)果 print(r.group()) # are r = re.search('a(\w+)', 'how are you') # groups 獲取模型中匹配到的結(jié)果,返回匹配到的字符串的分組部分 print(r.groups()) # ('re',) # 引用別名word1、word2,它們相當于key,value就是匹配到的內(nèi)容。 r = re.search('(?P<word1>a)(?P<word2>\w+)', 'how are you') print(r.group()) # are print(r.groups()) # ('a', 're') print(r.groupdict()) # {'word1': 'a', 'word2': 're'}4、re.findall(pattern, string, flags=0)
以string列表形式返回string中pattern的所有非重疊匹配項。從左到右掃描該字符串,并以找到的順序返回匹配項。如果該模式中存在一個或多個組,則返回一個組列表;否則,返回一個列表。如果模式包含多個組,則這將是一個元組列表。空匹配項包含在結(jié)果中。
import re # 匹配包含所有帶有o的單次 r= re.findall('\wo\w+', 'how are you') print(r) # ['how', 'you'] # * 前的字符可以是0個或者多個。返回list r = re.findall('好*', '你好嗎?我很好。你好才是真的好。你好好了') print(r) # ['', '好', '', '', '', '', '好', '', '', '好', '', '', '', '', '好', '', '', '好好', '', ''] r = re.findall('你好*', '你好嗎?我很好。你好才是真的好。你好好了') print(r) # ['你好', '你好', '你好好'] # + 用于匹配字符一次或者多次 r = re.findall('好+', '你好嗎?我很好。你好才是真的好。你好好了') print(r) # ['好', '好', '好', '好', '好好'] r = re.findall('你好+', '你好嗎?我很好。你好才是真的好。你好好了') print(r) # ['你好', '你好', '你好好'] # $ 用來匹配結(jié)尾 r = re.findall('測試$', '測試小姐姐還沒對象') print(r) # [] r = re.findall('測試$', '小姐姐我的代碼還沒測試') print(r) # ['測試'] # ^ 用來匹配開始 r = re.findall('^小姐姐', '小姐姐我的代碼還沒測試') print(r) # ['小姐姐'] # ^ 用于字符集中表示取反 # 匹配所有除字母外的字符 r = re.findall('[^a-z]', '123abcde789') print(r) # ['1', '2', '3', '7', '8', '9']5、re.split(pattern, string, maxsplit=0, flags=0)
split能夠按照所能匹配的字串將字符串進行切分,返回切分后的字符串列表
import re # 按照;或者, 對字符串進行分割 r = re.split('[;,]', 'abc,qwer; opq, mn') print(r) # ['abc', 'qwer', ' opq', ' mn']以上僅演示了部分正則的語法,更多正則語法 可以參考下表。
END
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達式(長文系列第②篇)
牛逼!Python函數(shù)和文件操作(長文系列第③篇)
牛逼!Python錯誤、異常和模塊(長文系列第④篇)
總結(jié)
以上是生活随笔為你收集整理的Python模块学习 ---- re正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matplotlib 可视化之图表层次结
- 下一篇: Python视频制作工具Manim入门,