正規表示式簡略筆記

2021-08-28 02:53:39 字數 4223 閱讀 4845

說明:之前提到正規表示式就頭大,每次也都是看個開頭就不看了,堅持不下去,這次終於完整地看完一次文件,加上之前多多少少看過的,對正規表示式算是有了整體的了解。這次筆記主要結合一培訓班的課件,以python的re模組為主。

簡略筆記:

1,正規表示式(regular expression),正規表示式使⽤單個字串來描述、匹配⼀系列匹配某個句法規則的字串。簡單說就是,這是乙個規則,它體現為乙個字串,可以提取出符合規則的內容。

2,用途:篩選,查詢,匹配。

3,學習方法:以我自己的經驗來看,只是簡單的看規則簡直難受,還是覺得結合例項,一邊練習一邊記憶比較好,然後就是多練習練習可以達到很好的效果。

4,python的正規表示式模組:re,match⽅法進⾏匹配操作,group⽅法來提取資料

字元

例子:

import re

ret = re.match('.', 'a')

ret.group() # 'a'

ret = re.match(".","b")

ret.group() # 'b'

ret = re.match(".","m")

ret.group() # 'm'

# 如果hello的⾸字元⼩寫,那麼正規表示式需要⼩寫的h

ret = re.match("h","hello python")

ret.group() # 'h'

# 如果hello的⾸字元⼤寫,那麼正規表示式需要⼤寫的h

ret = re.match("h","hello python")

ret.group() # 'h'

# ⼤⼩寫h都可以的情況

ret = re.match("[hh]","hello python")

ret.group() # 'h'

ret = re.match("[hh]","hello python")

ret.group() # 'h'

# 匹配0到9第⼀種寫法

ret = re.match("[0123456789]","7hello python")

ret.group() # '7'

# 匹配0到9第⼆種寫法

ret = re.match("[0-9]","7hello python")

ret.group() # '7'

# 普通的匹配⽅式

ret = re.match("s1季中賽","s1季中賽冠軍")

print ret.group() # s1季中賽

ret = re.match("s2季中賽","s2季中賽冠軍")

print ret.group() # s2季中賽

ret = re.match("s3季中賽","s3季中賽冠軍")

print ret.group() # s3季中賽

# 使⽤\d進⾏匹配

ret = re.match("s1季中賽","s1季中賽冠軍")

print ret.group() # s1季中賽

原始字串

正規表示式⾥使⽤"\"作為轉義字元,假如你需要匹配⽂本中的字元"\",那麼使⽤程式設計語⾔表示的正規表示式⾥將需要4個反斜槓"\\":前兩個和後兩個分別⽤於在程式設計語⾔⾥轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式⾥轉義成⼀個反斜槓。python中字串前面加上r表示原生字串可以改善這個問題。

例子:

import re

ret = re.match("c:\\\\", "c:\\a\\b\\c").group()

print(ret) # 'c:\\'

ret = re.match(r"c:\\a", "c:\\a\\b\\c").group()

print(ret) # 'c:\a'

# 使用原生字串

ret = re.match(r"c:\\a", "c:\\a\\b\\c").group()

print(ret) # 'c:\a'

數量

例子:

import re

ret = re.match("[a-z][a-z]*","aabcdef")

ret.group() # 'aabcdef'

ret = re.match("[a-za-z_]+[\w_]*","name1")

ret.group() # 'name1'

ret = re.match("[a-za-z_]+[\w_]*","_name")

ret.group() # '_name'

ret = re.match("[1-9]?[0-9]","33")

ret.group() # '33'

ret = re.match("[1-9]?[0-9]","09")

ret.group() # '0'

ret = re.match("[a-za-z0-9_]","12a3g45678")

ret.group() # '12a3g4'

ret = re.match("[a-za-z0-9_]","1abcde23s34455ff66")

ret.group() # '1abcde23s34455ff66'

邊界:

例子:

import re

ret = re.match("[\w]@163\.com$", "[email protected]").group()

print(ret) # '[email protected]'

ret = re.match(r".*\bver\b", "ab cde fgh").group()

print(ret) # 'ab cde'

匹配分組:

例子:

import ret

ret = re.match("\w@163\.com", "[email protected]")

ret.group()

ret = re.match("\w@(163|126|qq)\.com", "[email protected]")

ret.group()

ret = re.match("\w@(163|126|qq)\.com", "[email protected]")

ret.group()

ret = re.match("\w@(163|126|qq)\.com", "[email protected]")

ret.group()

# "[email protected]"

# "[email protected]"

# "[email protected]"

# attributeerror

# 通過引⽤分組中匹配到的資料即可,但是要注意是元字串,即類似 r""這種格式

ret = re.match(r"\w*", "mm")

ret.group()

# 因為2對<>中的資料不⼀致,所以沒有匹配出來

ret = re.match(r"\w*", "mm")

ret.group()

# "mm"

# attributeerror

ret = re.match(r".*", "

")ret.group()

ret = re.match(r".*", "

"# attributeerror

貪婪和非貪婪:python⾥數量詞預設是貪婪的(在少數語⾔⾥也可能是預設⾮貪婪),總是嘗試匹配盡可能多的字元;⾮貪婪則相反,總是嘗試匹配盡可能少的字元。在"*","?","+",""後⾯加上?,使貪婪變成⾮貪婪。

正規表示式 正規表示式函式 筆記

筆記直接使用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 匹...