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="">