1. 程式人生 > >re 模組 常規方法使用

re 模組 常規方法使用

前情提要:

    re模組主要用於正則,用的好了秒殺一切匹配的規則,這裡主要是介紹基本用法

      一:元字元

        1:\w 匹配字元,包含中文,數字或下劃線

 

 
 
l ='早乙女露依 123  是我的 321 心目中的 222 女神 666 女神 '

#
print(re.findall('\w',l)) # ['早', '乙', '女', '露', '依', '是', '我', '的', '心', '目', '中', '的', '女', '神', '女', '神']

 

 

 

        2:\W 匹配非字元,包含中文,數字或下劃線

 

 
 
l ='早乙女露依 123  是我的 321 心目中的 222 女神 666 女神 '

#
print(re.findall('\W',l)) #[' ', ' ', ' ', ' ', ' ', ' ', ' ']

 

 

 

        3:\s 匹配任意的空白符

 

#\s 匹配任意的空白符
# print(re.findall('\s',l))   #[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']

 

  

 

        4:\S 匹配任意的空白符

  

#\S 匹配任意非空白符
# print(re.findall('\S',l))   #['早', '乙', '女', '露', '依', '1', '2', '3', '是', '我', '的', '3', '2', '1', '心', '目', '中', '的', '2', '2', '2', '女', '神', '6', '6', '6', '女', '神']

 

 

 

        5:\d 匹配任意的數字

 

#\d 匹配數字
# print(re.findall('\d',l))  #['1', '2', '3', '3', '2', '1', '2', '2', '2', '6', '6', '6']

 

 

 

        6:\D匹配任意的非數字

 

#\D 匹配非數字
# print(re.findall('\D',l))  #['早', '乙', '女', '露', '依', ' ', ' ', ' ', '是', '我', '的', ' ', ' ', '心', '目', '中', '的', ' ', ' ', '女', '神', ' ', ' ', '女', '神', ' ']

 

 

 

        7:\A ^  匹配任意字串的開始

 

# \A   ^ 匹配字串的開始
# print(re.findall('\A早',l)) #['早']

 

 

 

        8:\Z  $ 匹配任意字串的結尾

 

#\Z    $ 匹配字串的結尾
# print(re.findall('神 $',l))  #['神 ']

 

  

 

        9: \t  \ n 匹配任意空白符

 

#\n  \t  匹配空白符
# print(re.findall('\n',l))

 

  

 

      二:重複匹配

        1:  . 匹配任意字元

 

#. 匹配任意字元
# print(re.findall('早.女',l)) # ['早乙女']

 

 

 

        2: ? 匹配0個或者一個左面的定義規則內容

 

#? 匹配0個或者1一個由左面字元定義的片段
# l ='abbzab abb aab'
# print(re.findall('a?b',l))

 

 

 

        3: * 匹配0 個或者多個左面的定義規則內容

 

 
 
#* 匹配0個或者多個左面字元表示式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a*b',l)) #['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'ab', 'aab', 'b', 'ab', 'b', 'b']
 

 

 

 

        4: + 匹配1 個或者多個左面的定義規則內容

 

 

# +匹配1個或者多個左面字元表示式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a+b',l))      #['ab', 'aaaaaab', 'ab', 'ab', 'aab', 'ab']

 

 

 

 

        5: {n,m} 匹配n 至m 個左面的定義規則內容

 

#{n,m} 匹配n至m個左面字元的表示式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a{4,5}b',l))          #['aaaaab']

 

 

 

        6: .* 貪婪匹配 從頭匹配到尾巴

 

# .* 貪婪匹配  從頭匹配到尾巴
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a.*b',l))      # ['ab aaaaaab abbbabaabbabbb']

 

 

 

        7: .*? 非貪婪匹配  從頭匹配到尾巴

 

#.*?非貪婪匹配 ,從頭匹配到尾巴
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a.*?b',l))      #['ab', 'aaaaaab', 'ab', 'ab', 'aab', 'ab']

 

 

 

        8:[    ]  加入引數 匹配

 

[]      加入引數
# print(re.findall('a[abc]b','aab abb acb aaacb'))   #['aab', 'abb', 'acb', 'acb']

 

 

        9:[0-9] 加入數字 匹配

 

#[0-9]
# print(re.findall('a[0-9]b','a2b a3b a0b aaf  aab'))   #['a2b', 'a3b', 'a0b']

 

 

 

        10:[a-z] 加入小寫字母匹配

 

#[a-z]
# print(re.findall('a[a-z]b','abb bcb acb  afb asssddb')) #['abb', 'acb', 'afb']

 

 

 

        11:[A-Z] 加入大寫字母匹配

 

#[A-Z]
# print(re.findall('a[A-Z]b','aAb aCb Abb ABB'))      #['aAb', 'aCb']

 

 

 

        12:[a-zA-Z]  注意不能倒過來, 需要小的在前面

 

# print(re.findall('a[a-zA-Z]b','aAb aCb Abb ABB'))    #['aAb', 'aCb']

 

 

 

        13: ()  定製一個規則, 將滿足的規則匹配出來

 

# print(re.findall('(.*?)_b','wo_b chi_b hhe_b  fas adadas_bd')) #['wo', ' chi', ' hhe', '  fas adadas']

 

 

 

      三:  常用方法總結

          1:search 找到第一個規則,找不到則返回None

            物件.group() 呼叫

 

# print(re.search('alex','re alex alex 太白').group())        #alex
# print(re.search('alex','re aaleex aaleex 太白'))     #None

 

 

 

          2:match 匹配開頭文字,如果匹配不到就None

# print(re.match('alex','alex alex 太白').group())     #alex
# print(re.match('alex','re alex alex 太白')) #None

 

          3:spilt 切割

 

# s1 = 'wusir;太白,alex|日天!小虎'
# print(re.split(';,|!',s1))    #['wusir;太白,alex|日天', '小虎']

 

 

 

          4:compile() 制定一個規則

 

# re.I(re.IGNORECASE)
# 使匹配對大小寫不敏感
#
# re.L(re.LOCAL)
# 做本地化識別(locale-aware)匹配
#
# re.M(re.MULTILINE)
# 多行匹配,影響 ^ 和 $
#
# re.S(re.DOTALL)
# 使 . 匹配包括換行在內的所有字元
#
# re.U(re.UNICODE)
# 根據Unicode字符集解析字元。這個標誌影響 \w, \W, \b, \B.
#
# re.X(re.VERBOSE)
# 該標誌通過給予你更靈活的格式以便你將正則表示式寫得更易於理解。