python的正規表示式,主要使用re模組
re模組為python自帶的模組,不需要單獨安裝,引入re模組:import re。
1. re.match(pattern,string,flags=0)
功能:嘗試從字串起始位置匹配乙個字串,如果不是起始位置或不匹配,則返回值為none。
pattern:匹配的正規表示式
string:要匹配的字串
flags:標誌位,用於控制正規表示式的方式。
re.i: 忽略大小寫。
re.l: 做本地化識別。
re.m: 多行匹配。影響^和$。
re.s:是匹配包括換行符在內的所有字元。
re.u:根據unicode字元解析。
re.x:以更靈活的格式理解正則。
例如:print(re.match("www","www.www.baidu.com.www",flags=re.i))
執行結果:<_sre.sre_match object; span=(0, 3), match='www'>
span(0,3)表示開始位置和結束位置
2.re.search(pattern,string,flags=0)
功能:在整個字串中找到第乙個匹配成功的。匹配成功後,返回字串位置。
例如:print(re.search("www","aaa.www.baidu.com.www"))
執行結果:<_sre.sre_match object; span=(18, 21), match='www'>
3.正規表示式的pattern寫法
「.」:可以匹配除換行符意外的任意字元。如果加上re.flags=s 就可以匹配換行符。
「」:是字元集合,匹配括號中包含的任意字元.
例如:[0123456789] 或者[0-9]或者[\d]:表示匹配0-9中所有的數字
[a-z]:表示匹配任意的小寫字母
[a-za-z0-9]:表示匹配所有的大小寫字母和數字
「[^]」: 例如[^ails]:匹配除了a,i,l,s,這幾個之外的所有字元。[^]稱為脫字元。
\w:匹配數字,字母和下劃線。
\w:匹配非數字,字母和下劃線,等同於^\w。
\s:匹配任意空白符,包括空格,回車,換頁,製表。
\s:等同於^\s。
邊界字元:「^」匹配行首,「$」匹配行尾。 例如:print(re.search("^aa","aab.www.baidu.com.www")) 執行結果:<_sre.sre_match object; span=(0, 2), match='aa'>
\a:只匹配整個字串開始。
\z:匹配整個字串結束,即使在re.m模式下。
3. 匹配多個字串
re.findall(pattern,string,flags=0)
功能:找到所有匹配的字串,返回字串列表。
例如:print(re.findall("www","www.www.baidu.com.www"))
執行結果:['www', 'www', 'www']
x?:盡可能少的匹配,0個或1個字元。(x可以是任意字串,後面不再贅述)
x*:盡可能多的匹配,1個或n個字元。
x+:匹配至少乙個x字串。
x:匹配確定的n個字串。例如:print(re.findall("w","www.www.baidu.com.www")) 執行結果:['ww', 'ww', 'ww']
x:至少匹配n個字串。
x:至少匹配n個,至多匹配m個。
x|y:匹配x或者y字串。例如:print(re.findall("www|baidu","www.www.baidu.com.www")) 執行結果:['www', 'www', 'baidu', 'www']
4.找到對應的字串,並拆分字串
re.split(pattern,string,maxsplit=0,flags=0)
maxslpit:表示最多切割多少次。
功能:找到與正規表示式條件相符合的字串,對整個字串進行拆分。返回乙個字串列表。
例如:print(re.split(r"\.+","www.www.baidu. com. www")) 注意:『\.』 意思是轉義『.』 這個符號。
執行結果:['www', 'www', 'baidu', ' com', ' www']
5.不占用過多記憶體的方式,找到對應的字串。
re.finditer(pattern,string,flags=0)
功能:掃瞄整個字串,返回乙個迭代器。
例如:d=re.finditer(r"www","wwww.www.www.baidu.com.www")
while true:
try:
l=next(d)
print(d)
except stopiteration as e:
break
執行結果:
6. 字串的替換和修改
re.sub(pattern,repl,string,count=0,flags=0)
re.subn(pattern,repl,string,count=0,flags=0)
repl: 指定用來替換的字串。
count:最多替換的次數。count=0時替換所有符合條件的字串。
功能:先找到符合正規表示式的字串,再替換指定字串。
re.sub()和re.subn的區別:返回值不同,re.sub()只返回被替換後的字串。re.subn()返回被替換的字串和替換次數,為tuple型別。
例如:print(re.sub(r"www","aaa","www.www.baidu. com. www",count=2))
執行結果:aaa.aaa.baidu. com. www
例如:print(re.subn(r"www","aaa","www.www.baidu. com. www",count=2))
執行結果:('aaa.aaa.baidu. com. www', 2)
7. 將字串分組
使用(),將匹配的字串分組。在網路爬蟲中使用廣泛。
例如:str='010-09993345'
data=re.match(r"(?p(?p\d)-(?p\d))",str)
print(data.group(0)) #表示整個字串
print(data.group(1)) #表示第乙個分組,第乙個分組是最外面的乙個,包含內部的兩個。從外到內,從左至右。
print(data.group(2)) #表示第乙個子分組
print(data.group(3)) #表示第二個自分組
print(data.group('sub_group2')) #可以使用別名定位分組,別名新增方式"?p《別名》"
print(data.groups()) #表示所有的分組
執行結果:
010-09993345
010-09993345
01009993345
09993345
('010-09993345', '010', '09993345')
8. 編譯正規表示式
re.compile()
功能:將正規表示式編譯成乙個物件,可以呼叫re.mathc() , re.search() , re.findall() , re.finditer() , re.split() , re.sub() , re.subn()這些函式。
以後不用每次都寫正則的條件,只需要用物件呼叫即可。
例如(少量舉例,此處不再贅述):
執行結果:
Python 正規表示式學習(二)正規表示式語法
一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...
python正規表示式學習
今天學習了python中有關正規表示式的知識。關於正規表示式的語法,不作過多解釋,網上有許多學習的資料。這裡主要介紹python中常用的正 則表示式處理函式。re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import re text jgood is a handso...
python正規表示式學習
python 中的re 模組 正規表示式 就個人而言,主要用它來做一些複雜字串分析,提取想要的資訊 學習原則 夠用就行,需要的時候在深入 現總結如下 正規表示式中特殊的符號 表任意字元 表string起始 表string 結束 跟在字元後面表示,0個 多個,1個 多個,0個或者1個 符合條件的情況下...