01-16正則re模塊

什么是貪婪

在正則中控制匹配不確定次數(shù)的后面可以加 ?,來(lái)表示盡可能少的匹配
在貪婪的時(shí)候,匹配是盡可能多的匹配。
注意:盡可能少是在能夠匹配到的前提下,盡可能少
*? +? ?? {M,N}? 后面加問(wèn)號(hào)盡可能少的匹配

def main():
    re_str = r'\d+'
    print(re.search(re_str,'asdfsadf34557645==asd'))  #全部數(shù)字,盡可能多的
    re_str = r'\d+?'
    print(re.search(re_str,'asdfsadf34557645==asd'))   #只有一個(gè)3
if __name__ == '__main__':
    main()

re模塊

def main():

  1. compile(正則表達(dá)式) -->將正則表達(dá)式轉(zhuǎn)換成正則對(duì)象
    編譯后可以直接通過(guò)對(duì)象調(diào)用相關(guān)的對(duì)象方法
  re22 = re.compile(r'\d{3}')  # re.compile('\\d{3}')
    re22.fullmatch('234')
  1. fullmatch(正則表達(dá)式,字符串) ---> 讓字符串和正則表達(dá)式完全匹配,匹配成功返回匹配對(duì)象,失敗返回None
    應(yīng)用:檢測(cè)字符串內(nèi)容是否符合要求,例如:帳號(hào)、密碼、判斷手機(jī)號(hào)身份證號(hào)
    result = re.fullmatch(r'(\d{3})=(q*?)', '234=qq')
    print(result)

匹配對(duì)象
1。span - 匹配到的字符串在原字符串中的下標(biāo)范圍(結(jié)果是元組)
print(result.span()) #獲取整個(gè)正則表達(dá)式匹配到的內(nèi)容的范圍

  1. start和end - 匹配到的字符串在原字符串中的開(kāi)始下標(biāo)和結(jié)束下標(biāo)
print(result.start(),result.end())
    result.span(1)   # 獲取正則表達(dá)式中第一個(gè)分組匹配到的內(nèi)容的范圍(如果沒(méi)有分組分報(bào)錯(cuò))
    print(result.start(1), result.start(2)) #第一個(gè)分組的開(kāi)始下標(biāo),第二個(gè)分組的開(kāi)始下標(biāo)
  1. group() - 獲取匹配到的字符串(結(jié)果是字符串)
    print(result.group())   #獲取整個(gè)正則匹配到的字符串
    print(result.group(1))  #獲取第一個(gè)分組匹配到的字符串
    print(result.groups())  #同時(shí)獲取所有分組匹配到的字符串(結(jié)果是元組)
  1. string - 獲取原字符串
    print(result.string)
  1. match(正則表達(dá)式,字符串) -> 用字符串開(kāi)頭和正則表達(dá)式匹配(結(jié)果匹配對(duì)象,匹配失敗None)
 print(re.match(r'\D\d','s2123wqed'))
  1. search(正則表達(dá)式,字符串) -->在字符串中去匹配出第一個(gè)字符符合正則表達(dá)式的子串,匹配成功結(jié)果是匹配對(duì)象,失敗返回None
 print(re.search(r'[\u4e00-\u9fa5]{3}','s2白龍123花非花wqed'))
  1. split(正則表達(dá)式,字符串) -->將字符串按照滿足正則要求的子串進(jìn)行切割(返回值是列表)
    print(re.split(r'\d+','asdf2134asdf5645dasd12dsaa'))
    # ['asdf', 'asdf', 'dasd', 'dsaa']
  1. sub(正則表達(dá)式,新字符串1,原字符串2) --> 在原字符串2中查找能夠和正則表達(dá)式匹配的子串替換成新字符串1,產(chǎn)生一個(gè)新的字符串
    print(re.sub(r'\d','*','123sadqewqewr5454aasdasd'))  #區(qū)配所有數(shù)字,每個(gè)數(shù)字替換成一個(gè)*。
    print(re.sub(r'傻逼|傻','*','你是傻逼嗎?'))   #長(zhǎng)字符放前面,單獨(dú)一個(gè)字的放在后面。。分之是從第一個(gè)開(kāi)始匹配
    print(re.sub(r'傻逼|傻[插狗艸]', '*', '你是傻逼嗎?'))  #[]里任意一個(gè)字和前面組合也會(huì)被替換
  1. findall(正則表達(dá)式,字符串) --> 在字符串中獲取滿足正則表達(dá)式的所有的子串(結(jié)果是列表)
    注意:如果正則表達(dá)式中有分組,直接獲取到的是分組中匹配到的內(nèi)容。。如果有多個(gè)分組,列表中的元素是元組。(每個(gè)分組單獨(dú)一個(gè)元素)
    print(re.findall(r'\d+','132adq6556eqew12sd'))
    print(re.findall(r'(\d+)[a-z]', '132adq6556eqew12sd'))  #['132', '6556', '12']
    print(re.findall(r'(\d+)([a-z])', '132adq6556eqew12sd'))  #[('132', 'a'), ('6556', 'e'), ('12', 's')]
  1. finditer(正則表達(dá)式,字符串) -->在字符串中獲取滿足正則表達(dá)式的所有的子串(結(jié)果是迭代器,元素是匹配對(duì)象)
    result = re.finditer(r'\d+','132adq6556eqew12sd')
    print(next(result).group())
  1. re.I -->忽略大小寫(xiě)
    匹配的約束條件是放在函數(shù)的flags參數(shù)位置
print(re.fullmatch(r'[a-z]{2}','AS',re.I))

用戶名字母,數(shù)字下滑線 6-20 ,QQ號(hào)5-12位,首位不能是0

re.fullmatch(r'[a-zA-Z\b_]{6,20}','asdfqweasdf')
re.fullmatch(r'[1-9]\d{4,11}', '12354')
if __name__ == '__main__':
    main()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,031評(píng)論 2 16
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,251評(píng)論 0 20
  • python的re模塊--細(xì)說(shuō)正則表達(dá)式 可能是東半球最詳細(xì)最全面的re教程,翻譯自官方文檔,因?yàn)楣俜轿臋n寫(xiě)的是真...
    立而人閱讀 23,445評(píng)論 4 46
  • re模塊手冊(cè) 本模塊提供了和Perl里的正則表達(dá)式類(lèi)似的功能,不關(guān)是正則表達(dá)式本身還是被搜索的字符串,都可以...
    喜歡吃栗子閱讀 4,198評(píng)論 0 13
  • 1.什么是正則表達(dá)式正則表達(dá)式就是字符匹配的工具;是由正則符號(hào)和普通字符組成,來(lái)匹配不同規(guī)律的字符串 2.Pyth...
    嘩啦噼里啪啦閱讀 409評(píng)論 0 0

友情鏈接更多精彩內(nèi)容