感謝:
https://github.com/yidao620c/python3-cookbook
如有侵權,請聯絡我整改。
本文章節會嚴格按照原書(以便和原書對照,章節標題可能會略有修改),內容會有增刪。
2.4 字串匹配和搜尋
text.startswith()
以xxx開頭,
text.endswith()
以xxx結尾,
text.find()
查詢xxx的位置,返回下標,
複雜匹配可以用re
,
import re
示例,
>>> text
'today is 11/27/2012. pycon starts 3/13/2013.'
>>> datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
>>> datepat
re.compile('(\\d+)/(\\d+)/(\\d+)')
>>> datepat_no_capture = re.compile(r'\d+/\d+/\d+')
>>> datepat_no_capture
re.compile('\\d+/\\d+/\\d+')
>>> datepat.findall(text)
[('11', '27', '2012'), ('3', '13', '2013')]
>>> datepat_no_capture.findall(text)
['11/27/2012', '3/13/2013']
re.compile
預編譯為模式物件,效率更高,
注意,datepat
和datepat_no_capture
的差異,前者帶()
,後者沒有,
帶()
意味著捕獲分組
,結果以tupple
形式返回,以便對每一項做後續處理
在正規表示式中,
r
,表示原始字串,否則反斜槓也需要轉義,'(\\d+)/(\\d+)/(\\d+)'
除了findall()
,match()
可以用來從頭(起始)匹配,尾部不管,
示例,
>>> datepat.match('11/27/2012')
<re.Match object; span=(0, 10), match='11/27/2012'>
>>> datepat.match('x11/27/2012')
>>> datepat.match('11/27/2012x')
<re.Match object; span=(0, 10), match='11/27/2012'>