import re ret = re.findall("e..a", "Hermaeus") #"."是模糊表示一個字符 print(ret) ['erma'] ret = re.findall("^H..m", "Hermaeus") #"^"表示開頭必須是某個字符 print(ret) ['Herm'] ret = re.findall("a..s$", "Hermaeus") #"$"表示結尾必須是某個字符 print(ret) ['aeus'] ret = re.findall("abc*", "abccccc") #貪婪匹配[0,+∞] print(ret) ['abccccc'] ret = re.findall("abc+", "abccccc") #貪婪匹配[1,+∞] print(ret) ['abccccc'] ret = re.findall("abc?", "abccccc") #惰性匹配[0,1] print(ret) ['abc'] ret = re.findall("abc{1,3}", "abccccc") #貪婪匹配[1,3] print(ret) ['abccc'] ret = re.findall("abc*?", "abccccc") #這樣會讓其變成惰性匹配 print(ret) ['ab']
[ ]
即在字符集中任意匹配一個正則表達式
import re ret = re.findall("a[bc]", "abc") print(ret) ['ab'] ret = re.findall("[a-z]", "ahfao") print(ret) ['a', 'h', 'f', 'a', 'o'] ret = re.findall("[%$]", "ada%jf$") #在字符集裏面除了:- ^ \之外都是普通字符 print(ret) ['%', '$'] ##" - " 取在這之間的 ret = re.findall("[1-9]", "1jkah1k2k3j") print(ret) ['1', '1', '2', '3'] ##" ^ " 取反,即在這字符集裏面沒有的 ret = re.findall("[^ab]", "7ajkf2bfjab") print(ret) ['7', 'j', 'k', 'f', '2', 'f', 'j'] ##" \ " 轉義符 ret = re.findall("[\d]", "45dhaf2") print(ret) ['4', '5', '2']
\.
\d
\d
匹配任何十進制數;它至關於類 [0-9]。\D
匹配任何非數字字符;它至關於類 [^0-9]。\s
匹配任何空白字符;它至關於類 [ \t\n\r\f\v]。\S
匹配任何非空白字符;它至關於類 [^ \t\n\r\f\v]。\w
匹配任何字母數字字符;它至關於類 [a-zA-Z0-9_]。\W
匹配任何非字母數字字符;它至關於類 [^a-zA-Z0-9_]\b
匹配一個特殊字符邊界,好比空格 ,&,#等import re ret = re.findall(r"I\b", "I am LIST") ##添加"r",就變成了原生字符串,它表示把須要匹配的字符集直接交給模塊處理 print(ret)
( )
import re ret = re.search("(?P<id>\d{2})/(?P<name>\w{3})", "23/com") #"?P<id> 取名 print(ret) <_sre.SRE_Match object; span=(0, 6), match='23/com'> #返回一個對象 print(ret.group()) 23/com print(ret.group("id")) 23
|
符號import re ret = re.search("(ab)|\d", "rabjk4fk") #二選一 print(ret) print(ret.group())
import re #findall()方法 #返回全部知足匹配條件的結果,放在列表裏 re.findall('a','alvin yuan') #search()方法 #函數會在字符串內查找模式匹配,只到找到第一個匹配而後返回一個包含匹配信息的對象,該對象能夠;經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None。 re.search('a','alvin yuan').group() #match()方法 #同search,不過盡在字符串開始處進行匹配 re.match('a','abc').group() #split()方法 #先按'a'分割獲得''和'bcd',在對''和'bcd'分別按'b'分割 ret=re.split('[ab]','abcd') print(ret)#['', '', 'cd'] #sub()和subn()方法 #替代 ret=re.sub('\d','abc','alvin5yuan6',1) print(ret)#alvinabcyuan6 #替代,且能夠選擇次數 ret=re.subn('\d','abc','alvin5yuan6') print(ret)#('alvinabcyuanabc', 2) #compile()方法 #對象賦予 obj=re.compile('\d{3}') ret=obj.search('abc123eeee') print(ret.group())#123 #finditer()方法 ret=re.finditer('\d','ds3sy4784a') print(ret) #<callable_iterator object at 0x10195f940> #返回迭代器 print(next(ret).group()) print(next(ret).group())
注意:app
import re ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com') print(ret)['oldboy'] #這是由於findall會優先把匹配結果組裏內容返回,若是想要匹配結果,取消權限便可 ['oldboy'] ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com') print(ret) ['www.oldboy.com']
在正則表達式中,能夠對過濾到的字符串進行分組,分組使用圓括號的方式:函數
group
:和group(0)
等價,返回的是整個知足條件的字符串groups
:返回的是裏面的子組,索引從1開始group(1)
:返回的是第一個子組,能夠傳入多個代碼實例:spa
import re text = "apple price is $99,orange price is $10" ret = re.search(r".*(\$\d+).*(\$\d+)",text) print(ret.group()) print(ret.group(0)) print(ret.group(1)) print(ret.group(2)) print(ret.groups()) ''' result: apple price is $99,orange price is $10 apple price is $99,orange price is $10 $99 $10 ('$99', '$10') '''