《Python Cookbook v3.0.0》Chapter2 字串、文字

Code2235 發表於 2021-08-17
Python

感謝:
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預編譯為模式物件,效率更高,
注意,datepatdatepat_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'>