什麼是正規表示式?
正則文字的高階匹配模式,提供搜尋,替換等功能。本質是由一系列字串和特殊符號構成的字串,這個字串就是正規表示式!
這是乙個什麼東西!他的輸出結果是什麼?
("-?\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...