1 # r"(?P<name>正則)" 2 3 import re 4 res = re.search('e','leiyunse') # 搜索 搜到 一個 結果就返回 5 print(res.group()) # e 6 7 res = re.match('\w+','wuwu is not go ...
# 1. 正則表達式
# 元字元
# . 除了換行符外任意字元
# \w 數字 字母 下劃線
# \s 空白符
# \b 單詞的末尾
# \d 數字
# \W 除了數字 字母 下劃線
# \D 除了數字
# \S 除了空白符
# ^ 開頭
# $ 結尾
# [] 匹配字元組中的字元
# [^] 除了字元組內的元素外
# 量詞 限定符
# * {0,n} 零或者更多
# + {1,n} 一或更多
# ? {0,1} 零或一
# {p} p次
# {p,} p次或更多次
# {p,q} 從p到q次
# .* 貪婪匹配 儘可能多的匹配到結果
# .+
# .*? 惰性匹配 是儘可能的少匹配.
# 分組 正則中使⽤()進⾏分組. 如.匹配⼀個相對複雜的⾝份證號
# ^[1-9]\d{14}(\d{2}[0-9x])?$
# ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
# 轉義
# 正則表達式中,有很多有特殊意義的是元字元,如\n和\s等,若要在正則中匹配正常的"\n"⽽不是"換⾏符"需要對"\"進⾏轉義, 變成'\\'.
# 而在python中,都是字元串的形式出現,字元串中\也有特殊的含義,本身還需轉義.所以匹配⼀次"\n",字元串中要寫成'\\n',那麼正則就要寫成"\\\\n",
# 這樣太麻煩.所以這時用r'\n'這個概念,此時的正則是r'\\n'就可以了.
# 如 r"www\.(baidu|google)\.com","www.google.com"
# \n 換行
# \\n \n
# \.
# \/
# \?
# 2. re模塊
# findall() 獲取到匹配的所有內容
# finditer() 匹配到所有內容。 返回迭代器
# search() 搜索。查到了就返回
# match() 匹配. 從頭開始匹配
1 # r"(?P<name>正則)" 2 3 import re 4 res = re.search('e','leiyunse') # 搜索 搜到 一個 結果就返回 5 print(res.group()) # e 6 7 res = re.match('\w+','wuwu is not good man') # match 從開頭匹配 若匹配到了就返回 8 print(res.group()) # wuwu 9 10 lst = re.findall('\w+','wusir and exo') # findall 查找所有 返回list 11 print(lst) # ['wusir', 'and', 'exo'] 12 13 it = re.finditer("\w+","mai le fo leng") # 返回迭代器 14 for el in it: 15 print(el.group()) 16 ''' 17 mai 18 le 19 fo 20 leng 21 ''' 22 23 # 分組優先順序 24 lst = re.findall(r"www\.(baidu|google)\.com","www.google.com") # ()最優先返回 25 print(lst) # ['google'] 26 27 # (?:) 去掉優先順序 28 lst = re.findall(r"www\.(?:baidu|google)\.com","www.google.com") 29 print(lst) # ['www.google.com'] 30 31 # split 切割 若加括弧()會保留切的 32 lst = re.split("([ab])","alex is not a sb,no he is a big sb") 33 print(lst) 34 35 # sub 替換 36 res = re.sub(r"\d+","_sb_","alex111wusir222taibai666ritian999") 37 print(res) # alex_sb_wusir_sb_taibai_sb_ritian_sb_ 38 39 # subn 替換 返回元組 帶替換次數 40 res = re.subn(r"\d+","_sb_","alex111wusir222taibai666ritian999") 41 print(res) 42 43 # re.compile() # 把正則表達式預載入 44 obj = re.compile(r"alex\d+and") 45 res = obj.search("alex222andwusir333taibai666ritian999") 46 print(res.group()) # alex222and 47 # 若數字單獨拿出來 48 obj = re.compile(r"alex(?P<name>\d+)and") 49 res = obj.search("alex222andwusir333taibai666ritian999") 50 print(res.group()) # alex222and 51 print(res.group("name")) # 222View Code