由於需要做畢設的網路爬蟲部分,有許多之前學的部分很多都沒有徹底吃透,現在又回爐重做,學了一下正規表示式。
常用的匹配規則:(這個記憶還是有問題,有些簡單的還是可以記住的,還是需要經常翻閱)
\w 匹配字母、數字、下劃線,等價於[a-z|a-z|0-9] \w可以匹配漢字(python),
\w 匹配不是字母、數字、下劃線的其他字元
\s 匹配任意空白字元,等價於(\t\n\r\f)
\s 匹配任意非空字元
\b 字元邊界,匹配空格,標點符號或者換行符,只匹配乙個位置
\d 匹配數字,等價於[0-9]
\d 匹配不是數字的字元
\a 匹配字串開頭
\z 匹配字串結尾的,如果存在換行,只匹配到換行前的結束字串
\z 匹配字串結尾的,如果存在換行,同時匹配換行符
\g 匹配最後完成匹配的位置
\n 匹配乙個換行符
\t 匹配乙個製表符(tab)
^ 匹配一行字串的開頭
$ 匹配一行字串的結尾
. 匹配任意字元,除了換行符.當re.dotall標記被指定時,這可以匹配包括換行符在內的任字元
[…] 用來表示一組字元,比如[abc]表示匹配a或b或c,[a-z],[0-9]
[^…] 匹配不在裡面的字元,比如[^abc]匹配除a,b,c以外的字元
* 匹配0個或多個字元
+ 匹配1個或多個字元
? 匹配0個或1個前面的正規表示式片段
?p命名乙個name的組
?i 不區分大小寫
?=* 匹配*前面的字段
?!* 不匹配*
?:* 匹配*
?<=* 匹配*後面的字段
?re.match()
語法:re.match(pattern,string,modifier),
其中pattern是正規表示式,string是要匹配的字串,modifier是修飾符控制正則的匹配方式。
示例:import re
string = 'hello world! my name is fz'
pattern = '^hello\s\s\s\s\s\s\s'
result = re.match(pattern,string)
print(result)
輸入結果:#span() :輸出匹配的範圍
下面來介紹modifier,也就是修飾符
re.i:使得匹配不區分大小寫
re.l:做本地化識別匹配
re.m:多行匹配,對匹配開頭^和結尾$有影響
re.s:使得.匹配包括換行符在內的所有字元(這個好像比較常用,可以記憶)
re.u:根據unicode字符集解析字元
re.x:賦予更靈活的格式有助於正規表示式的理解
示例:
import re
string = '''hello world!
my name is fz
teleponenumber is 1111111
'''pattern = '^hello.*?is(.*?)teleponenumber.*?(\d+)'
result = re.match(pattern,string,re.s)
strresult = result.group()
strresultsecond = result.group(1)
strresultthird = result.group(2)
print(strresult)
print(strresultsecond)
print(strresultthird)
執行結果是:hello world!
my name is fz
teleponenumber is 1111111
fz
1111111
注意:本來樓主寫的時候加了\s換行符,結果出錯,由於加了re.s的模式,就不需要考慮換行的問題。
轉義符:\
說明:當匹配字串中包含匹配符時,需要轉義使其不產生匹配的作用。
示例:
import re
string = "hello world! my name is fz(**真難寫) i'm hanhan"
pattern = '^he.*?\(**真難寫\)'
result = re.match(pattern,string)
strresult = result.group()
print(strresult)
執行結果:hello world! my name is fz(**真難寫)
注意:^匹配時前面字元不一定要寫全。
re.search()
說明:與match區別在於,match從頭開始匹配,一旦字串開始位置不符合正規表示式就會匹配失敗;search匹配整個字串。
示例:
import re
string = "hello world! my name is fz(**真難寫) i'm hanhan"
pattern = 'my.*?\(**真難寫\)'
result = re.search(pattern,string)
strresult = result.group()
print(strresult)
執行結果:my name is fz(**真難寫)
re.findall()
說明:當被匹配的字串中有多個符合正規表示式時,使用re.findall()可以獲得符合正規表示式的所有內容。
示例:
import re
string = """
hello world! my name is fz(**真難寫) i'm hanhan
hello world! my name is fz(python很強) i'm hanhan
hello world! my name is fz(爬蟲好難) i'm hanhan
"""pattern = 'my.*?fz\(.*?\)\s'
result = re.findall(pattern,string,re.s)
for num in result:
print(num)
執行結果:my name is fz(**真難寫)
my name is fz(python很強)
my name is fz(爬蟲好難)
re.sub()
語法:re.sub(pattern,replace,string),
其中pattern是被替代的字元的正規表示式,replace是用於替換的字元,string是要匹配的字串。
說明:sub()的意義在於可以快速對匹配的字串進行處理,比如去除掉字串中的數字字元。
示例:
import re
string = 'hello world!my name is fz.teleponenumber is 1111111'
pattern = '\d+'
replace = "10086"
result = re.sub(pattern,replace,string,re.s)
print(result)
執行結果:hello world!my name is fz.teleponenumber is 10086
re.compile()
說明:compile 函式用於編譯正規表示式,生成乙個正規表示式( pattern )物件,供 match() 和 search() 這兩個函式使用。
語法:re.compile(pattern,modifier),
其中pattern是正規表示式,modifier是修飾符。
示例:
import re
string = 'noneone123haha90'
pattern=re.compile('\d+')
m=pattern.match(string)
print(m)
執行結果:none
import re
string = 'noneone123haha90'
pattern=re.compile('\d+')
m=pattern.match(string,7,14)
print(m)
print(m.group())
print(m.start())
print(m.end())
print(m.span())
執行結果:123710
(7, 10)
正規表示式 正規表示式函式 筆記
筆記直接使用pycharm製作,需要原始檔請私聊。正規表示式函式 1.match 2.search 3.全域性匹配函式 全域性匹配 re.compile 正規表示式 findall 資料 import re string poythonydasadcasa pat2 p.y 懶惰模式執行 較精準 r...
正規表示式筆記
不同的語系編碼的順序不一樣 lang c 0 1 2 3 a b c d z a b c d z lang zh cn 0 1 2 3 4 a a b b c c z z 使用正規表示式時,需要留意環境的語系是什麼,否則會有不同的結果 alnum 英文大小寫字元及數字 0 9 a z a z alp...
正規表示式筆記
d 0 9中的任意乙個數字 w a z,a z,0 9,中的任意乙個,即字母數字下劃線 s 空格,製表符,換頁符等空白字元的其中任意乙個 小數點可以匹配換行符 n 以外的任意乙個字元 匹配某範圍內的任意乙個字元 ab9 匹配 a b 9 中的任意乙個 abc 匹配abc之外的任意乙個字元 a g 匹...