Python-正則表達式及實戰小例子


注意Python的字符串本身也用'\'轉義,所以要特別注意,一般我們都建議使用Python的r前綴,就不用考慮轉義的問題了

 1,行的起始

例子:匹配‘cat’ 開頭

patt=re.compile(r'^cat') # re.compile 返回一個正則表達式對象

表示匹配以c作為一行的第一個字符,后面跟着a,后面跟着t

所以'vocative'就不會被匹配到,原因是因為cat在字符的里面

 2,行的結尾

import re sentence='''Hi Jack:\n Python is a beautiful language\n BR''' patt=re.compile(r'(BR|Bestregards)$') m=re.search(patt,sentence) if m : print 'match'
else: print 'not match'
>> match

     要查找sentence中是否以“BR或Bestregards” 結尾   

  3 ,單詞的邊界

正則里面有2個特殊字符\b and \B來匹配單詞的邊界 :

  • \b 匹配的模式是一個單詞的邊界(不論這個單詞的前面是有字符還是沒有字符)

  • \B 匹配出現在一個單詞中間的模式

  • 例如:

the            #匹配包含有'the'的字符串

\bthe         #匹配任何以'the'開始的字符串

\bthe\b      #僅僅匹配單詞'the'

\Bthe         #匹配任意包含'the'但不以'the'開頭的單詞

   4,字符組

   比如我們需要匹配'grey'或者'gray'的時候,怎么辦,可以用正則的[]來表示,gr[ea]y,表示先找到g,然后找到r,然后找到e或者a,最后是一個y

patt=re.compile(r'gr[ea]y')#意思就是grey 或者gray都是可以匹配上的

   5,多選結構

我們可以用'|'來匹配任意子表達式,'|'是一個非常簡便的元字符,它的意思是"或",通過它我們能把不同的子表達式組合成一個總的表達式,比如'am'|'pm'就是能夠同時匹配其中任意一個的正則表達式,回頭再看上面的例子'gr[ea]y',其實能寫成'grey|gray',或者'gr(e|a)y'

6、可選項元素
'?' 表示可選項,問號跟在什么后面就表示什么是可選的
例如:6月4日,可能寫成'June'也可以寫成'Jun',而且日期也有可能寫作'fourth'或者'4th'或者4,這個時候就可以寫成June?(fourth|4(th)?),代表了e是可選的,th是可選的,可有可無都表示4號

7,重復出現
+,表示緊鄰元素重復出現一次或者多次,至少出現一次,否則返回失敗;

*,表示緊鄰元素重復出現0次或者多次,允許出現0次;
例如:
  • a*表示0個或者多個a,所以為0的時候,就是空字符
  • a+表示1個或者多個a,所以a至少要有1次
8,匹配重復的次數
次數用{}里面的數字來表示

例如:patt=re.compile(r'([1-9]{3})') 就表示匹配1-9之間的數字,且這個數字只能出現3次,str='123str' ,就可以匹配上,而str1='2str1'就不能匹配,如果想匹配上要這么寫patt1=re.compile(r'([1-9]{1-3})'),1-9數字出現1次或2次或3次

9、排除型字符組
  • 當^在字符組的外面的時候"表示一個行的開頭"

  • 當^在字符組的內部(而且是必須緊接着字符組的第一個方括號之后),它就是一個元字符,表示排除型

  • 例如:找出字母g后面的字母不是u
  • import re words=['gold',' Google','Sogu','Guess'] patt=re.compile(r'.*g[^u]') #‘.’匹配任意一個字符,'*'匹配0個或多個字符,g后面不是u for w in words: m=re.match(patt,w) if m: print w

    >>
    gold
    Google
實戰小例子
1,設計一個正則來過濾一個字符串序列中的10到59
import re

patt=r'[1-5][0-9]'

lis=[10,20,30,40,2,3,59,60,'aa','3aaa']

match=re.findall(patt,str(lis))

if match:
print(match)

結果:
['10', '20', '30', '40', '59']

 2,過濾字符串中的只含2個字符的字母,並且第一個字母是大寫A或B或C

patt=r'[A-C][A-Z a-z]'

3,過濾一個字符串中的含3個字母的獨立字符

例如:比如這樣的一個字符串'xy,1,2,?,123@sohu,Ab,w1,Cz,xyh,abc',只想過濾出來xyh,abc 這樣的

patt=r'/b[a-z A-Z]{3}/b' #/b 單詞的邊界

4、過濾一個字符串中的含3個字母的字符,並且最后一個字母是z

patt=r'/b[a-z A-Z][a-z A-Z][Z]/b'

5,過濾正確的24小時時間制

import re time='10:00,99:90,8:00,19:19:14:00pm,5:xm,6,00,8:0923:23pm,29:19pm,23:59' patt = r'\b([01]?[0-9]|2[0-4])(:)([0-5][0-9])' match = re.findall(patt,time) if match: print([''.join(x)for x in match])

執行結果:
['10:00', '8:00', '19:19', '14:00', '8:09', '23:59']

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM