Day-13: 正則表達式

  正則表達式:正則表達式

  因爲程序中對字符串進行操做的狀況實在太多,因此就誕生了正則表達式。它就是用來匹配字符串的。學習

  \d匹配一個數字,\w匹配一個字母或者數字,\s匹配一個空格(包括Tab等空白符)spa

  *表示任意個字符,+表示一個字符,?表示0或者1個字符,{n}表示n個字符,{n,m}表示n-m個字符(數量表示符號要放在字符表示符號的後面)3d

  []裏面表示範圍code

  [0-9a-zA-Z\_]能夠匹配一個數字、字母或者下劃線;對象

  A|B能夠匹配A或B,^表示行的開頭,$表示行的結束。blog

  正則表達式自身要轉義表示,使用r''後就不用考慮正則表達式的轉義。字符串

  re模塊:get

>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object at 0x1026e18b8>
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
>>>

  match()方法判斷是否匹配,若是匹配成功,返回一個Match對象,不然返回Noneit

>>> re.split(r'[\s\,\;]+', 'a,b;; c  d')
['a', 'b', 'c', 'd']

  正則表達式中有()表示提取有分組,能夠在match對象上用group()方法提取出子串來,group(0)表示原始字符串,group(1)表示第1個字符串。

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object at 0x1026fb3e8>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

  re模塊中方法運行時會先編譯正則表達式,再去匹配。若是一個正則表達式要重複使用幾千次,能夠先預編譯該表達式,以後就不須要編譯該步驟了,直接匹配。

>>> import re
# 編譯:
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')

  貪婪原則:正則表達式匹配時默認是貪婪匹配,儘量多的匹配。

>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')

因爲\d+採用貪婪匹配,直接把後面的0所有匹配了,結果0*只能匹配空字符串。

必須用?換成非貪婪模式採用匹配出

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')

  注:本文爲學習廖雪峯Python入門整理後的筆記

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息