您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“python的正則表達式怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“python的正則表達式怎么用”這篇文章吧。
re 模塊使 Python 語言擁有全部的正則表達式功能
# 提取大小寫字母混合的單詞 import re a = 'Excel 12345Word23456PPT12Lr' r = re.findall('[a-zA-Z]{3,5}',a) # 提取字母的數量3個到5個 print(r) # ['Excel', 'Word', 'PPT'] # 貪婪 與 非貪婪 【Python默認使用貪婪模式】 # 貪婪:'[a-zA-Z]{3,5}' # 非貪婪:'[a-zA-Z]{3,5}?' 或 '[a-zA-Z]{3}' # 建議使用后者,不要使用?號,否則你會與下面的?號混淆 # 匹配0次或無限多次 *號,*號前面的字符出現0次或無限次 import re a = 'exce0excell3excel3' r = re.findall('excel*',a) r = re.findall('excel.*',a) # ['excell3excel3'] # excel 沒有l 有很多l都可以匹配出來 print(r) # ['exce', 'excell', 'excel'] # 匹配1次或者無限多次 +號,+號前面的字符至少出現1次 import re a = 'exce0excell3excel3' r = re.findall('excel+',a) print(r) # ['excell', 'excel'] # 匹配0次或1次 ?號,?號經常用來去重復 import re a = 'exce0excell3excel3' r = re.findall('excel?',a) print(r) # ['exce', 'excel', 'excel']
line = 'xyz,xcz.xfc.xdz,xaz,xez,xec' r = re.findall('x[de]z', line) # pattern 是x開始,z結束,含d或e print(r) # ['xdz', 'xez'] r = re.findall('x[^de]z', line) # pattern 是x開始,z結束,不是含d或e print(r) # ['xyz', 'xcz', 'xaz']
# \w 可以提取中文,英文,數字和下劃線,不能提取特殊字符 import re a = 'Excel 12345Word\n23456_PPT12lr' r = re.findall('\w',a) print(r) # ['E', 'x', 'c', 'e', 'l', '1', '2', '3', '4', '5', 'W', 'o', 'r', 'd', '2', '3', '4', '5', '6', '_', 'P', 'P', 'T', '1', '2', 'l', 'r'] # \W 提取特殊字符,空格 \n \t import re a = 'Excel 12345Word\n23456_PPT12lr' r = re.findall('\W',a) print(r) # [' ', '\n']
# 限制電話號碼的位置必需是8-11位才能提取 import re tel = '13811115888' r = re.findall('^\d{8,11}$',tel) print(r) # ['13811115888']
# 將abc打成一個組,{2}指的是重復幾次,匹配abcabc import re a = 'abcabcabcxyzabcabcxyzabc' r = re.findall('(abc){2}',a) # 與 # ['abc', 'abc'] print(r) r = re.findall('(abc){3}',a) # ['abc']
# findall第三參數 re.I忽略大小寫 import re a = 'abcFBIabcCIAabc' r = re.findall('fbi',a,re.I) print(r) # ['FBI'] # 多個模式之間用 | 連接在一起 import re a = 'abcFBI\nabcCIAabc' r = re.findall('fbi.{1}',a,re.I | re.S) # 匹配fbi然后匹配任意一個字符包括\n print(r) # ['FBI\n']
匹配出字符串中所有 與制定值相關的值
以列表的形式返回
未匹配則返回空列表
import re re.findall(pattern, string, flags=0) pattern.findall(string[ , pos[ , endpos]])
import re line = "111aaabbb222小呼嚕奧利奧" r = re.findall('[0-9]',line) print(r) # ['1', '1', '1', '2', '2', '2']
re.match 嘗試從字符串的起始位置匹配一個模式
如果不是起始位置匹配成功的話,match()就返回none。
re.match(pattern, string, flags=0) # (標準,要匹配的,標志位)
print(re.match('www','www.xxxx.com')) print(re.match('www','www.xxxx.com').span()) print(re.match('com','www.xxxx.com'))
<re.Match object; span=(0, 3), match='www'> (0, 3) None
import re a = 'life is short,i use python,i love python' r = re.search('life(.*)python(.*)python',a) print(r.group(0)) # 完整正則匹配 ,life is short,i use python,i love python print(r.group(1)) # 第1個分組之間的取值 is short,i use print(r.group(2)) # 第2個分組之間的取值 ,i love print(r.group(0,1,2)) # 以元組形式返回3個結果取值 ('life is short,i use python,i love python', ' is short,i use ', ',i love ') print(r.groups()) # 返回就是group(1)和group(2) (' is short,i use ', ',i love ')
import re # .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符 # (.*?) 表示"非貪婪"模式,只保存第一個匹配到的子串 # re.M 多行匹配,影響 ^ 和 $ # re.I 使匹配對大小寫不敏感 line = "Cats are smarter than dogs" matchObj1 = re.match(r'(.*) are (.*?) .*', line, re.M|re.I) matchObj2 = re.match(r'(.*) smarter (.*?) .*', line, re.M|re.I) matchObj3 = re.match(r'(.*) than (.*)', line, re.M|re.I) print(matchObj1) print(matchObj2) print(matchObj3) # <re.Match object; span=(0, 26), match='Cats are smarter than dogs'> # <re.Match object; span=(0, 26), match='Cats are smarter than dogs'> # None if matchObj1: print ("matchObj1.group() : ", matchObj1.group()) print ("matchObj1.group(1) : ", matchObj1.group(1)) print ("matchObj1.group(2) : ", matchObj1.group(2)) else: print ("No match!!") if matchObj2: print ("matchObj2.group() : ", matchObj2.group()) print ("matchObj2.group(1) : ", matchObj2.group(1)) print ("matchObj2.group(2) : ", matchObj2.group(2)) else: print ("No match!!") if matchObj3: print ("matchObj3.group() : ", matchObj3.group()) print ("matchObj3.group(1) : ", matchObj3.group(1)) print ("matchObj3.group(2) : ", matchObj3.group(2)) else: print ("No match!!") # matchObj1.group() : Cats are smarter than dogs # matchObj1.group(1) : Cats # matchObj1.group(2) : smarter # matchObj2.group() : Cats are smarter than dogs # matchObj2.group(1) : Cats are # matchObj2.group(2) : than # matchObj3.group() : Cats are smarter than dogs # matchObj3.group(1) : Cats are smarter # matchObj3.group(2) : dogs
import re # 點 是匹配單個字符 # 星是前面的東西出現0次或無數次 # 點星就是任意字符出現0次或無數次 str = "a b a b" matchObj1 = re.match(r'a(.*)b', str, re.M|re.I) matchObj2 = re.match(r'a(.*?)b', str, re.M|re.I) print("matchObj1.group() : ", matchObj1.group()) print("matchObj2.group() : ", matchObj2.group()) # matchObj1.group() : a b a b # matchObj2.group() : a b
掃描整個字符串并返回第一個成功的匹配。
re.search(pattern, string, flags=0)
import re line = "cats are smarter than dogs" matchObj = re.match(r'dogs',line,re.M|re.I) matchObj1= re.search(r'dogs',line,re.M|re.I) matchObj2= re.match(r'(.*) dogs',line,re.M|re.I) if matchObj: print ("match --> matchObj.group() : ", matchObj.group()) else: print ("No match!!") if matchObj1: print ("match --> matchObj1.group() : ", matchObj1.group()) else: print ("No match!!") if matchObj2: print ("match --> matchObj2.group() : ", matchObj2.group()) else: print ("No match!!") # No match!! # match --> matchObj1.group() : dogs # match --> matchObj2.group() : cats are smarter than dogs
re.compile是將正則表達式轉換為模式對象
這樣可以更有效率匹配。使用compile轉換一次之后,以后每次使用模式時就不用進行轉換
re.sub('被替換的','替換成的',a)
# 把FBI替換成BBQ import re a = 'abcFBIabcCIAabc' r = re.sub('FBI','BBQ',a) print(r) # 把FBI替換成BBQ,第4參數寫1,證明只替換第一次,默認是0(無限替換) import re a = 'abcFBIabcFBIaFBICIAabc' r = re.sub('FBI','BBQ',a,1) print(r) # abcBBQabcCIAabc # abcBBQabcFBIaFBICIAabc
# 把函數當參數傳到sub的列表里,實現把業務交給函數去處理,例如將FBI替換成$FBI$ import re a = 'abcFBIabcFBIaFBICIAabc' def 函數名(形參): 分段獲取 = 形參.group() # group()在正則表達式中用于獲取分段截獲的字符串,獲取到FBI return '$' + 分段獲取 + '$' r = re.sub('FBI',函數名,a) print(r)
以上是“python的正則表達式怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。