1. 程式人生 > >正則表示式和re模組

正則表示式和re模組

1. 正則表示式 匹配字串
  元字元
    .  除了換行
    \w 數字, 字母, 下劃線
    \d 數字

    [] 字元組
    ^ 字串的開始
    $ 字串的結束
    | 或者

    [^xxx] 非xxxx


    \s 空白符
    \n 換行
    \t 製表符
    \b 單詞的邊界
    \W 非數字, 字母, 下劃線
    \D  非數字
    \S 非空白符
  
  量詞
    *   0->n
    +     1->n
    ?        0->1


    {p}      p次
    {p,q}   p->q次
    {p,}    至少p次

  貪婪
    .*
    .+
  惰性:
    .*?  儘可能少的匹配

  轉義 \\\\n    =>   \\n    =>   \n
    正則前面加r

  分組 ()


2. 在python中使用正則. re模組


  在python中獲得的正則取一個名字   (?P<name>正則)


  1. search() 搜尋. 搜尋到第一個結果返回
  2. match() 匹配. 收到一個結果返回. 從頭開始匹配
  3. findall() 查詢所有匹配結果
  4. finditer() 返回迭代器.
  5. compile() 編譯

import re
a = re.compile(r"\d+")  #    編譯了一段正則. 載入了一段正則
lis = a.findall("盧本偉就是55開,再來10個馬飛,跟開哥也還是55開")
print(lis)      

  


  6. group("name") 獲取資料

  7. re.S  忽略掉 . *?  的換行

import re

a = re.findall("\d","盧本偉是56開")
print(a)

b = re.finditer("\d","盧本偉是56開")
for i in b :
    print(i.group())

c = re.search("\d","盧本偉是56開")
print(c.group())


d = re.match("\d","56開是盧本偉")
print(d.group())


kai = re.finditer(r"盧本偉是(?P<aname>.*?),他有一個小弟叫(?P<bname>.*?),","盧本偉是55開,他有一個小弟叫馬飛飛,他們關係很好的",re.S)
for i in kai :
    print(i.group("aname"),i.group("bname"))