認識正則表達式

Python裏的正則表達式re:

    pattern:匹配模式,遵循正則表達式語法

    method:匹配方法,search/match/split/findall/finditer/sub/subn

re模塊介紹

   re.search:搜索字符串,找到匹配的第一個字符串

   re.match:從字符串開始開始匹配

   re.split:使用正則表達式來分隔字符串

   re.findall:根據正則表達式從左到右搜索匹配項,返回匹配的字符串列表

   re.finditer:根據正則表達式從左到右搜索匹配項,返回一個迭代器返回MatchObject

   re.sub:字符串替換

   re.subn:與sub一樣,返回值多替換的字符串個數

   re.group:返回匹配組:索引0表示全部匹配的字符串,索引1開始表示匹配的子組

   re.groupdict:返回命名組的字典

   re.groups:返回匹配的子組,索引從1開始的所有子組

操作解說示例:

re_demo():
    txt=m=.search(,txt)
    m.groups()


re_method():
    s=.search(,s) .match(,s)  .match(,s)re_method_2():
    s=.split(,s)re_method_3():
    s1=s2=.findall(,s1).findall(,s2)
re_method_4():
    s2 = i=.finditer(,s2)
    m i:
        m.group()
re_method_5():
    s2 = .sub(,,s2)
    .subn(, , s2)
re_method_6():
    data=m=.match(,data)
    m.group(,,)
    m.groups()__name__==:

    re_method_6()

樣例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
def re_pattern_syntax():
    #dot,caret,$
    #  */+/?
    # * 表示匹配0個到都哦個
    # ab+ 表示匹配1個或多個的b
    # ? 表示匹配0到1個
    print re.match(r'.*','abc\nedf').group()
    #點表示任意一個字符,*任意多少個,只能匹配一行字符,碰到\表示換行符號不再匹配
    print re.match(r'.*','abc\edf',re.DOTALL).group()
    #通過加re.DOTALL,這個點不僅僅表示任意字符還可以表示換行符
    print re.findall(r'^abc','abc\habc')
    print re.findall(r'^abc', 'abc\habc',re.MULTILINE)
    #re.MULTILINE把字符串當多行來處理,碰到回車符當另外一行處理
    print re.findall(r'abc\d$','abc1\habc2')#$表示匹配一個字符串的結束
    print re.findall(r'abc\d$','abc1\habc2',re.MULTILINE)#$表示匹配一個行的結束
    print re.match(r'ab*','a')
    print re.match(r'ab+','abd')
    print re.match(r'ab?','abc').group()
    #greedy/non-greedy 貪婪和非貪婪
    #{m} 匹配次數
    #轉義字符\用來匹配特殊字符
    #[]集合
    s='<H1>title</H1>'
    print re.match(r'<.+>',s).group()#默認用貪婪模式匹配
    print re.match(r'<(.+)>',s).group(1)#基於貪婪模式,打印出它的 group
    print re.match(r'<(.+?)>',s).group()#表示用非貪婪模式匹配任意字符
    print re.match(r'<(.+?)>', s).group(1)
    print re.match(r'ab{2,4}','abbbbbb').group() #這樣也是屬於貪婪模式儘量的匹配多
    print re.match(r'ab{2,4}?', 'abbbbbb').group()#這樣是非貪婪模式匹配,儘量匹配少
    print re.search(r'','The price is $9.9').groups()#若要匹配$匹配符號,不加、當作結束符號來處理,
    print re.search(r'\$', 'The price is $9.9').groups()
    print re.search(r'0[xX]([0-9A-Fa-f]{6})','The hex value is  0xFF03D6').groups()




if __name__=='__main__':
    re_pattern_syntax()
    
 
 ####一些特殊字符的使用
 
 #!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
def re_pattern_syntax():
  #\number 表示前一個匹配組
  print re.search(r'(\d)(\d)(\d)\1\2\3','135135').groups()
  print re.search(r'(\d)(\d)(\d)\1\2\3','135135').groups()
  print re.search(r'(\d{3}) \1', '135 135').groups()
  #\d\D  匹配一個連字符\匹配非連字符
  #\b匹配單詞的開頭和結尾
  print re.search(r'(\d{3}-\d{4}-\d{4})','157-5923-2692').groups()
  print re.search(r'(\d{3}-\d{4}-\d{4})', '157-5923-2692').groups()
  print re.search(r'\b(\d{3}-\d{4}-\d{4})\b', '157-5923-2692').groups()#不合法的是無法匹配出來的
  print re.search(r'(\d{3}\D\d{4}\D\d{4})', '157-5923-2692').groups()
  #\s\S 空格\非空格 \f換頁  \v垂直製表
  print re.search(r'(\d{3}\s\d{4}\s\d{4})', '1570 5923 2692').groups()
  print re.search(r'(\d{3}\S\d{4}\S\d{4})', '1570-5923-2692').groups()
  #\w\W  匹配字符和非字符
  print re.match(r'(\w+)\s*:\s*(\w+)', 'Name:   Joey').groups()
  #或略大小寫
  print re.match(r'(Name)\s*:\s*(\w+)', 'NAME:   Joey',re.IGNORECASE).groups()
  #re.VERBOSE  註釋/re.compile
  s='the number is 20.33'
  r=re.compile(r'''
    \d+  #整數部分
    \.?  #小數部分
    \d*  #小數部分,可選

''',re.VERBOSE)
  print re.search(r,s).group()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章