正規表示式筆記

2021-10-01 17:52:10 字數 4479 閱讀 9522

由於需要做畢設的網路爬蟲部分,有許多之前學的部分很多都沒有徹底吃透,現在又回爐重做,學了一下正規表示式。

常用的匹配規則:(這個記憶還是有問題,有些簡單的還是可以記住的,還是需要經常翻閱)

\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 匹...