re模塊(正則)
阿新 • • 發佈:2018-12-06
忽略大小寫 表達式 ont 範圍 mage \n 列表 符號 int
一, 什麽是正則?
正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法.
在python中,正則內嵌在python中,並通過re模塊實現,正則表達模式被編譯成一系列的字節碼,然後由c編寫的匹配引擎執行.
二,常用的匹配模式(元字符)
import re
# 將所有的數據都找出來放進列表中list,一一匹配 print(re.findall(‘alex‘, ‘haha alex is alex is dsb‘)) # >>>: [‘alex‘, ‘alex‘] # \w 匹配字母數字及下劃線(一個\w每次匹配一個字符)# \W 匹配非字母數字及下劃線 print(re.findall(‘\w‘,‘Aah123 +-_‘)) # >>>: [‘A‘, ‘a‘, ‘h‘, ‘1‘, ‘2‘, ‘3‘, ‘_‘] print(re.findall(‘\w\w‘,‘Aah123 +-_‘)) # >>>: [‘Aa‘, ‘h1‘, ‘23‘] print(re.findall(‘\w9\w‘,‘Aa9h123 aaa9c+-_‘)) # >>>: [‘a9h‘, ‘a9c‘] # \s 匹配任意空白字符,等價於\t\n\r\f # \S 匹配非空字符# \d 匹配任意數字,[0-9] # \D 匹配任意非數字 # ^ : 僅從開頭開始匹配 # $ : 僅從尾部開始匹配 print(re.findall(‘^alex‘, ‘alex is alex is alex‘)) # >>>: [‘alex‘] print(re.findall(‘^alex‘, ‘1alex is alex is alex‘)) # >>>: []
重復匹配: | . | * | ? | .* | .*? | + | {n,m}
# . :代表一個字符,該字符可以是任意字符(除換行符) print(re.findall(‘a.c‘, ‘a alc aaac a c asfdsaf‘)) # >>>: [‘alc‘, ‘aac‘, ‘a c‘] print(re.findall(‘a.c‘, ‘a alc aaac a\nc asfd‘,re.DOTALL)) #DOTALL使得.匹配包括換行符在內的所有字符 # >>>: [‘alc‘, ‘aac‘, ‘a\nc‘]
# ? :代表左邊那一個字符出現0次或者1次 print(re.findall(‘ab?‘, ‘a ab abb abbbb a123b a123bbbb‘)) # >>>: [‘a‘, ‘ab‘, ‘ab‘, ‘ab‘, ‘a‘, ‘a‘]
# * :代表左邊那一個字符出現0次到無窮次 print(re.findall(‘ab*‘, ‘a ab abb abbbb a123b a123bbbb‘)) # >>>: [‘a‘, ‘ab‘, ‘abb‘, ‘abbbb‘, ‘a‘, ‘a‘]
# + :代表左邊那一個字符出現1次到無窮次 print(re.findall(‘ab+‘, ‘a ab abb abbbb a123b a123bbbb‘)) # >>>: [‘ab‘, ‘abb‘, ‘abbbb‘]
# {n,m} :代表左邊那一個字符出現n次到m次 print(re.findall(‘ab{1,3}‘, ‘a ab abb abbbb a123b a123bbbb‘)) # >>>: [‘ab‘, ‘abb‘, ‘abbb‘]
# .* :匹配任意0個到無窮個字符,貪婪匹配 print(re.findall(‘a.*c‘,‘a132142qwdcavcccc(((()))))c2333‘)) # >>>: [‘a132142qwdcavcccc(((()))))c‘]
# .*? :匹配任意0個到無窮個字符,非貪婪匹配 print(re.findall(‘a.*?c‘, ‘a132142qwdcavcccc(((()))))c2333‘)) # >>>: [‘a132142qwdc‘, ‘avc‘]
# \ :轉義 print(re.findall(‘a\\\\c‘,‘a\c aac‘)) print(re.findall(r‘a\\c‘,‘a\c aac‘)) # >>>: [‘a\\c‘]
# 忽略大小寫 # print(re.findall(‘alex‘,‘my name is alex ALex is dSB‘,re.I)) # # >>>: [‘alex‘, ‘ALex‘] # msg = ‘‘‘my name is egon # asdfassg egon # 122324324egon‘‘‘ # print(re.findall(‘egon$‘,msg,re.M)) # >>>: [‘egon‘, ‘egon‘, ‘egon‘]
# []: 代表匹配一個字符,這個字符是來自於自定義的範圍 print(re.findall(‘a[1]c‘, ‘a a1c aaac a c asfdsaf‘,re.DOTALL)) # >>>: [‘a1c‘] print(re.findall(‘a[0-9]c‘, ‘a a1c aaac a7c asfdsaf‘,re.DOTALL)) #[0-9]的數字 # >>>: [‘a1c‘, ‘a7c‘] print(re.findall(‘a[a-zA-Z]c‘, ‘a a1c aaac a7c asfdsaf‘,re.DOTALL)) #所有字母 # >>>: [‘aac‘] print(re.findall(‘a[+*/-]c‘, ‘a a1c aaac a7c asfdsaf‘,re.DOTALL)) #-代表連字符,在首尾才表示符號意思
re模塊(正則)