1. 程式人生 > >python基礎13 ---函數模塊3(正則表達式)

python基礎13 ---函數模塊3(正則表達式)

匹配字符串 特殊字符 註意 末尾 高度 功能 all -a match

正則表達式

一、正則表達式的本質

  1、正則表達式的本質(或 RE)是一種小型的、高度專業化的編程語言,(在Python中)它內嵌在Python中,並通過 re 模塊實現。正則表達式模式被編譯成一系列的字節碼,然後由用 C 編寫的匹配引擎執行。

  2、正則表達式簡介

    正則表達式並不是Python的一部分。正則表達式是用於處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分  強大。得益於這一點,在提供了正則表達式的語言裏,正則表達式的語法都是一樣的,區別只在於不同的編程語言實現支持的語法數量不同;但不用擔心,不被支持的語法通常是  不常用的部分。

二、正則表達式元字符。(. * + ? ^ $ {} [] \ | ())

  1、" . "表示匹配字符串中除換行符外的任意字符。

    eg:re.findall(‘a.‘,‘abc‘) #返回的結果是ab

  2、" + "表示匹配前一個子表達式一次或多次,相當於一到正無窮。{1,}

    eg:re.findall(‘a+‘,‘abc‘) #返回的結果是a

  3、" * "表示匹配前一個子表達式零次或多次,相當於零到正無窮。{0,}

    eg:re.findall(‘aa*‘,‘abc‘) #返回的結果是a

  4、" ? "表示匹配前一個子表達式零次或一次,相當於零和一。{0,1}

    eg:re.findall(‘aa?‘,‘abc‘) #返回結果為a

  5、" ^ "(脫字符)表示匹配字符串開始的位置,也就是說只有目標字符串出現在開始位置才會匹配。

    eg:re.findall(‘^ab‘,‘abcabcabc‘) #返回的結果是ab

  6、" $ "(美元符)表示匹配字符串的末尾位置,也就是說只要目標字符串出現的末尾的位置才會匹配。

    eg:re.findall(‘bc$‘,‘abcabc‘) #返回的結果為bc

  7、" {x,y} "(大括號)表示匹配前面一個子表達式至少為x次最多為y次,其中x,y都為非負數,x<y。

    eg:re.findall(‘a{2,4}‘,‘abcaaaabc‘) #返回的結果為aaaa

  8、" [x,y] "(中括號)表示匹配中括號裏面任意一個字符,如果匹配成功則返回結果,其中中括號內所有特殊字符都失去作用,只有“-”,“\”,“ ^ ”有其特殊意義。

    eg:re.findall(‘a[b,c,d]c‘,‘abcadcafc‘) #返回的結果為abc,adc

  註意:-在中括號中表示範圍,^在中括號中表示取反,\在中括號中保留其原來功能。

  9、" () "表示將需要匹配的字符分組,匹配小括號中的正則表達式,或者指定一個子集的開始和結束位置(該功能主要和\[0-9]使用)。

    eg:re.findall(‘r(ge)g‘,‘fagrgeg5654yg5h54t3‘) #返回結果為ge

    eg:re.findall(‘r(:?ge)g‘,‘fagrgeg5654yg5h54t3‘) #返回結果為rgeg

    eg:re.search(‘r(ge)\1‘,‘fagrgege5654yg5h54t3‘) #返回結果為gege

    eg:ret=re.search(r"-blog-aticles-(?P<year>20[01]\d)-(?P<month>\d+)","-blog-aticles-2015-04")#P是大寫的

      print(ret.group("year"))

  10、"x|y"表示匹配正則表達式x或者正則表達式y.一般情況是和小括號連用

    eg:re.findall(‘ac|bc‘,‘abcdefg‘) #返回的結果為bc

    eg:re.findall(‘a(?:b|c)d‘,‘acdbcdefg‘) #返回的結果為acd

  11、" \ "反斜杠在表達式中的作用最為廣泛,它既可以將一個普通字符轉換為一個特殊字符,也可以把一個特殊字符轉換為一個普通字符(相當於解除元字符的特殊功能),如果反斜杠後面跟數字他有兩種用法,如果數字為1-99表示引用序號的子字符串所匹配的字符串,如果數字是0開頭或者為三位數字(092,123),那麽他會把這個三位數字當作一個八進制來看待(主要是把這個八進制轉換成ASCII表對應的字符,ASCII編碼表共有127個字符)。

    eg:re.findall(‘\d+‘,‘afew3223fef45t‘) #返回結果為3223,45

    eg:re.findall(r‘\\d‘,‘fawef\dfwa‘) #返回的結果為\\d

    eg:re.search(‘(ge)\1‘,‘fagrgege5654yg5h54t3‘) #返回結果為ge 相當於re.search(‘gege‘,‘fagrgege5654yg5h54t3‘) #返回結果為gege

  註釋:\d 匹配任何十進制數; 它相當於類 [0-9]。

     \D 匹配任何非數字字符; 它相當於類 [^0-9]。

     \s 匹配任何空白字符; 它相當於類 [ \t\n\r\f\v]。

     \S 匹配任何非空白字符; 它相當於類 [^ \t\n\r\f\v]。  

     \w 匹配任何字母數字下劃線字符; 它相當於類 [a-zA-Z0-9_]。

     \W 匹配任何非字母數字下劃線字符; 它相當於類 [^a-zA-Z0-9_]

     \b 匹配一個特殊字符邊界,比如空格 ,&,#等

三、正則表達式模塊

  1、re模塊

    import re

  2、模塊的使用方法

    1.re.findall(pattern,string) :該模塊是返回所有匹配條件的結果放在一個列表內。

    2.re.search(pattern,string):函數會在字符串中查找模式匹配,直到找到第一個符合匹配的字符串後返回匹配的對象,其返回的結果是對象的內存地址,要想查看其匹配的  對象就必須在返回結果對象的後面加上.group()來調用其字符串,其字符串類型是個str,如果字符串沒有被匹配,就返回None。

    3.re.match(pattern,string) :函數會在字符串開頭查找,如果匹配成功返回該字符串的內存地址,需要用.group()調用該內存地址,返回str類型的字符串,如果沒有匹配成功  則返回Nonetype

    

    

  

  

python基礎13 ---函數模塊3(正則表達式)