Python中的正則

風掠丶幽蘭發表於2018-11-20

regex_lst = [

  (`字元組`,),

  (`非列印字元`,),

  (`特殊字元`,),

  (`定位符`,),

  (`限定符`,),

  (`re模組`,),

  (`分組命名`,),

  (`或匹配`,),

  (`貪婪匹配與惰性匹配`,),

]

 

字元組

  [0-9]

  [a-z]

  [A-Z]

  [^a]

非列印字元

  w     匹配字母,數字,下劃線  word

  s      匹配空字元          space

  d   匹配數字           digit

特殊字元

  .        匹配除換行符
之外的任何單字元

定位符

  ^  匹配字串的開始位置

  $    匹配字串的結尾位置

限定符

  *      0次或多次

  +     1次或多次

  ?     0次或1次

  {n}   n次

  {n,}  n次或多次

  {n,m}    n次至m次

 

re模組

  re_lst = [

    (`re.compile(regex)`,),

    (`re.findall(pattern, str)`,),

    (`re.finditer(pattern, str)`,),

    (`re.search(pattern, str)`,),

  ]

re.compile(regex)

1 import re
2 
3 """
4 re.compile(regex)
5     編譯一個正規表示式模式,返回一個模式物件
6 """
7 regex = r`[a-z]`
8 pattern = re.compile(regex)

re.findall(pattern, str)

 1 import re
 2 
 3 """
 4 re.findall(pattern, str)
 5     返回所有滿足匹配條件的結果,並放到列表中
 6 """
 7 regex = r`[a-zA-Z]+`
 8 s = `Hello Python`
 9 pattern = re.compile(regex)
10 
11 lst = re.findall(pattern, s)
12 print(lst)    # [`Hello`, `Python`]

re.finditer(pattern, str)

 1 import re
 2 
 3 """
 4 re.finditer(pattern, str)
 5     返回迭代器
 6     迭代器中每一個元素需要呼叫group(),得到結果
 7 """
 8 regex = r`[a-zA-Z]+`
 9 s = `Hello Python`
10 pattern = re.compile(regex)
11 
12 iterator = re.finditer(pattern, s)
13 
14 print(iterator)    # <callable_iterator object at 0x000001FDB3F29BE0>
15 
16 for i in iterator:
17     print(i.group())

re.search(pattern, str)

 1 import re
 2 
 3 """
 4 re.search(pattern, str)
 5     返回滿足匹配條件的第一個結果物件
 6 """
 7 regex = r`[a-zA-Z]+`
 8 s = `Hello Python`
 9 pattern = re.compile(regex)
10 
11 obj = re.search(pattern, s)
12 
13 if obj:
14     print(obj.group())

分組命名

 1 import re
 2 
 3 """
 4 flags
 5     re.I    忽略大小寫
 6     re.M    多行模式,改變^和$的行為
 7     re.S    .可以匹配任意字元,包括換行符
 8 """
 9 regex = r`<dd>.*?title="(?P<title>.*?)".*?</dd>`
10 s = `<dd><a href="#" title="Python中的正則">...</a></dd>`
11 pattern = re.compile(regex, re.S)
12 
13 iterator = re.finditer(pattern, s)
14 
15 for i in iterator:
16     print(i.group(`title`))

或匹配

 1 import re
 2 
 3 """
 4 取消分組
 5     (?:)
 6 或匹配
 7     long|short
 8 """
 9 regex = r`www.(?:page|hopen).com`
10 s = `www.hopen.com`
11 pattern = re.compile(regex)
12 
13 iterator = re.finditer(pattern, s)
14 
15 for i in iterator:
16     print(i.group())

貪婪匹配與惰性匹配

 1 import re
 2 
 3 
 4 def get_data(regex, s):
 5     pattern = re.compile(regex)
 6     obj = re.search(pattern, s)
 7     if obj:
 8         return obj.group()
 9 
10 
11 # 貪婪匹配
12 regex_greedy = r`<.*>`
13 # 惰性匹配
14 regex_lazy = r`<.*?>`
15 content = `<a href="#">...</a>`
16 
17 ret_1 = get_data(regex_greedy, content)
18 ret_2 = get_data(regex_lazy, content)
19 print(ret_1)    # <a href="">...</a>
20 print(ret_2)    # <a href="">

 

  

相關文章