python正則一些簡單匹配

suliver發表於2021-09-09


元字元的使用


re.findall(regex,string)

功能:在string字串中,匹配regex正規表示式能夠匹配的項,放到一個列表中返回


* 普通字串 


元字元 :abc  

匹配規則 : 匹配字串的值

匹配示例 :abc 


In [3]: re.findall('abc','abcdeabc')

Out[3]: ['abc', 'abc']



* 使用“或”進行多個匹配


元字元: re1 | re2

匹配規則:既能匹配正規表示式re1所表達內容,也能匹配           re2所表達內容

匹配示例:ab | bc  --》  ab   bc

In [5]: re.findall('ab|de','abcdeabc')

Out[5]: ['ab', 'de', 'ab']


* 點號  "."


元字元: .

匹配規則:匹配任意一個字元

匹配示例:f.o   ――》  foo   fao   f@o  

In [6]: re.findall('f.o','foo,f@oabfabo')

Out[6]: ['foo', 'f@o']


* 匹配開頭子串


元字元:  ^   

匹配規則:匹配一個字串的開頭位置

匹配示例:^From  匹配以 From 開頭的字串起始部分

In [9]: re.findall('^From','From China')

Out[9]: ['From']


In [10]: re.findall('^From','I come From China')

Out[10]: []


*匹配字串的結尾


元字元 :  $ 

匹配規則 : 當一個字串以什麼結尾時使用$標記

匹配示例 : py$ -》  匹配所有以py結尾的字串

In [17]: re.findall('py$','test.py')

Out[17]: ['py']


In [18]: re.findall('py$','python')

Out[18]: []


* 匹配任意0個或多個字元


元字元 :   *

匹配規則: 匹配前面出現的字元或正規表示式0次或者多次

匹配示例: ab* ->   abbbbbbbb

In [23]: re.findall('.*','askjdfh89w4234')

Out[23]: ['askjdfh89w4234', '']


In [24]: re.findall('.*','askjdfh89w4234sdfhhg')

Out[24]: ['askjdfh89w4234sdfhhg', '']


In [25]: re.findall('ab*','a')

Out[25]: ['a']


In [26]: re.findall('ab*','abbbb')

Out[26]: ['abbbb']


*  匹配任意1個或多個字元


元字元 :   +

匹配規則: 匹配前面出現的字元或正規表示式1次或者多次

匹配示例: ab+ ->   abbbbbbbb

In [28]: re.findall('ab+','abbbb')

Out[28]: ['abbbb']


In [29]: re.findall('ab+','a')

Out[29]: []


* 匹配字元 0 次或1次


元字元 :  ? 

匹配規則:匹配前面出現的字元或正規表示式0次或1次

匹配示例: ab? --》 a  或者  ab

In [31]: re.findall('ab?','a')

Out[31]: ['a']


In [32]: re.findall('ab?','ab')

Out[32]: ['ab']


* 匹配前面的字元或re指定次數


元字元 : {N}    N代表一個數字

匹配規則:匹配前面出現的字元或正規表示式N次

匹配示例: ab{3} --》 abbb

In [34]: re.findall('ab{3}','abbbbbb')

Out[34]: ['abbb']


In [35]: re.findall('ab{3}','abb')

Out[35]: []


* 匹配前面的字元或re指定次數


元字元 : {M,N}    M,N代表數字

匹配規則:匹配前面出現的字元或正規表示式M 到 N次

匹配示例: ab{3,8} --》 abbb  abbbbbbbb

In [36]: re.findall('ab{3,8}','abbb')

Out[36]: ['abbb']


In [37]: re.findall('ab{3,8}','abbbbbbbbbbb')

Out[37]: ['abbbbbbbb']


* 字符集合匹配


元字元 : [abcd]

匹配規則: 匹配中括號中任意一個字元

匹配示例: b[abcd]t    ->   bat  bbt  bct  bdt

In [40]: re.findall('b[abc123]t','bat,b1tba3t')

Out[40]: ['bat', 'b1t']


In [41]: re.findall('[ab][cd]','acadbcbd')

Out[41]: ['ac', 'ad', 'bc', 'bd']


* 字符集合匹配


元字元 : [a-zA-Z0-9] [a-z] [0-9] [a-zA-Z] [3-8]

          [b-x]

匹配規則: 匹配中括號中任意一個區間內的字元

匹配示例: [a-zA-Z0-9]+  匹配任意一個由字母數字組 In [43]: re.findall('[a-zA-Z0-9]+','safd1324')

Out[43]: ['safd1324']


In [44]: re.findall('[a-zA-Z0-9]+','adf$&^%123')

Out[44]: ['adf', '123']

                         成的非空字串


* 字符集合不匹配


元字元 : [^...]   ... 表示上面兩項中任意內容

匹配規則: 匹配任意非中括號中的字符集

匹配示例: [^aeiou]  匹配任意一個非aeiou字元 

           [^a-z]  匹配任意一個非小寫字母

In [46]: re.findall('[^a-z]','abc1j2^&d')

Out[46]: ['1', '2', '^', '&']


In [47]: re.findall('[^aeiou]','hello world')

Out[47]: ['h', 'l', 'l', ' ', 'w', 'r', 'l', 'd']



* 匹配(非)數字字元


元字元 : d  [0-9]   D [^0-9] 

匹配規則 : d 匹配任意一個數字字元 

           D 匹配任意一個非數字字元

匹配示例 :d{3}  -->  '123'

In [49]: re.findall('d{3}','hello 1234')

Out[49]: ['123']


In [50]: re.findall('D{3}','hello 1234')

Out[50]: ['hel', 'lo ']


* 匹配(非)字母數字字元


元字元 : w  [a-zA-Z0-9]   W   [^a-zA-Z0-9]

匹配規則 : w 匹配任意一個字母或數字字元 

           W 匹配任意一個非字母或數字字元

匹配示例 :w{3}  -->  'a23'

In [51]: re.findall('[A-Z]w*','Hello World')

Out[51]: ['Hello', 'World']


In [52]: re.findall('w+-d+','xiaoming-56')

Out[52]: ['xiaoming-56']


* 匹配(非)空字元


元字元 : s  (空格 n 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2370/viewspace-2804781/,如需轉載,請註明出處,否則將追究法律責任。

相關文章