正規表示式貪婪非貪婪是啥玩意等!

2021-09-22 21:43:55 字數 3247 閱讀 2663

什麼是正規表示式?

正則文字的高階匹配模式,提供搜尋,替換等功能。本質是由一系列字串和特殊符號構成的字串,這個字串就是正規表示式!

這是乙個什麼東西!他的輸出結果是什麼?

("-?\d+\.?\d*")
這是在ipython中顯示的結果

re.findall("-?\d+\.?\d*","fss5f1d5s123s1f5123-5sf4-65sdf")

['5', '1', '5', '123', '1', '5123', '-5', '4', '-65']

這就是乙個簡單的正規表示式!

正則中元字元的使用

普通字元 匹配規則:每個普通字元匹配其對應的字元

re.findall("ab","abhhuhhkjifiabuih")

['ab', 'ab']

或關係「|」 匹配規則:「|」兩側任意的正規表示式

re.findall("ab|hk","abhhuhhkjifiabuih")

['ab', 'hk', 'ab']

匹配單個字元「.」 匹配規則:匹配除換行外的任意乙個字元

re.findall("ab.","abhhuhhkjifiabuih")

['abh', 'abu']

匹配字符集"" 匹配規則:匹配字符集中的任意乙個字元

re.findall("[dsdf]","abhhuhhkjifiabuih")

['f']

匹配字符集反集 「[^]」 匹配規則除了字符集外的任意乙個字元

re.findall("[^abf]","abhhkji453fiabuih")

['h', 'h', 'k', 'j', 'i', '4', '5', '3', 'i', 'u', 'i', 'h']

匹配字串的開始位置「^」匹配規則:匹配目標的開頭位置

re.findall("^a","a,bhhkji453fi,a,buih")

['a']

匹配字串的結束位置「$」 匹配規則字串的結尾位置

re.findall("a$","bhhkji453fi,buiha")

['a']

匹配字元重複「*」 匹配規則:匹配前面的字元出現0次或多次

re.findall("ab*","abhhkabbbbbb,buiha")

['ab', 'abbbbbb', 'a']

元字元「+」 匹配規則:匹配前面的字元出現1此或者多次

re.findall("ab+","abhhkabbbbbb,buiha")

['ab', 'abbbbbb']

元字元「?」匹配規則:匹配前面的字元出現0次或1次

re.findall("-?[^a-z]","abhhkabb-bbb-b,buiha")

['-', '-', ',']

元字元「」匹配規則:匹配前面的字元出現n次

這裡是乙個**號碼的匹配規則

re.findall("1[0-9]","461161651132165132161651321335")

['11616511321', '13216165132']

元字元「」 匹配規則:匹配前邊的字元出現m到n次

qq號碼的匹配規則第一位不為0

re.findall("[1-9][0-9]","461161651132165132161651321335")

['46116165113', '21651321616', '51321335']

匹配任意(非)數字字元

元字元「\d\d」 匹配規則:\d 匹配任意數字字元,\d 匹配任意非數字字元

re.findall("\d","4611as61sd6511")

['4', '6', '1', '1', '6', '1', '6', '5', '1', '1']

re.findall("\d","4611as61sd6511")

['a', 's', 's', 'd']

匹配任意(非)普通字元

元字元「\w \w」 匹配規則:\w匹配普通字元 \w匹配非普通字元

re.findall("\w","46as*61s-d6,511")

['4', '6', 'a', 's', '6', '1', 's', 'd', '6', '5', '1', '1']

re.findall("\w","46as*61s-d6,511")

['*', '-', ',']

匹配任意(非)空字元

空字元指 空格 \r \n \t \v \f 字元

re.findall("\s","46as* 61 s- d6,511")

[' ', ' ', ' ']

re.findall("\s","4* 61 s- d6,5")

['4', '*', '6', '1', 's', '-', 'd', '6', ',', '5']

正規表示式的轉義,如果使用正規表示式匹配特殊字元則需要加\表示轉義在程式語言中,常使用原生字串書寫正規表示式避免多重轉義,此時我們就需要用到「r」表示原生字串。

貪婪和非貪婪模式

貪婪模式:預設情況下,匹配重複的元字元總是盡可能多的向後匹配內容

re.findall(r"ab+","abbbbbjkhab")

['abbbbb', 'ab']

非貪婪模式:讓匹配重複的元字元盡可能少的向後匹配內容。

re.findall(r"ab+?","abbbbbjkhab")

['ab', 'ab']

這就是貪婪模式和非貪婪模式,我們只要在我們匹配重複的元字元後邊新增乙個問號即可解決!

正規表示式分組

在正規表示式中,以()建立的正規表示式的內部分組,子組是正規表示式的一部分,可以作為內部整體的操作物件。

乙個正規表示式中可以包含多個子組,但是不要重疊或者巢狀結構複雜

子組序列號一般從外到內,從左到右計數。

正規表示式 貪婪和非貪婪

源字串 aatest1 bbtest2 cc 正規表示式一 匹配結果一 test1 bbtest2 貪婪 正規表示式二 匹配結果二 test1 這裡指的是一次匹配結果,所以沒包括test2 非貪婪 貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多...

正規表示式 貪婪非貪婪模式

貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。1.舉乙個例子 string str abcaxc patter p ab.c 貪婪匹配 正規表...

python正規表示式 貪婪 非貪婪

主要就是.與.的區別,是貪婪的,是非貪婪的例子如下 import re line cats are smarter than dogs matchobj1 re.match r are line matchobj2 re.match r are line matchobj1.group 1 matc...