第1章 1.8 引入正則表示式
一、示例如下:
>>> import re
#匯入正則表示式模組
>>> re.search(r'LOG', 'SOME LOGS')
<re.Match object; span=(5, 8), match='LOG'>
#在字串中查詢'LOG'
>>> re.search(r'^LOG', 'LOGS')
<re.Match object; span=(0, 3), match='LOG'>
#'^'是指查詢'LOG'開頭的字串
>>> re.search(r'^LOG', 'SOME LOGS')
#該模組未找到'LOG'開頭的字串,返回None
>>> re.search(r'LOG$', 'SOME LOGS')
#'$'是指查詢'LOG'結尾的字串,未找到返回None
>>> re.search(r'LOG$', 'SOME LOG')
<re.Match object; span=(5, 8), match='LOG'>
#'$'是指查詢'LOG'結尾的字串
>>> STRING = 'something in the things she shows me'
>>> match = re.search(r'thing', STRING)
#在字串中查詢thing,只取第1個
>>> STRING[:match.start()], STRING[match.start():match.end()], STRING[match.end():]
('some', 'thing', ' in the things she shows me')
#該命令為分別取出匹配前的字串、匹配的字串和匹配後的字條串,其中match.start()為匹配的開始索引、match.end()為匹配的結束索引。
>>> match = re.search(r'\bthing', STRING)
#\b標誌單詞的開頭或者結尾, 其中something不是單詞的開頭,而things是單詞的開頭
>>> STRING[:match.start()], STRING[match.start():match.end()], STRING[match.end():]
('something in the ', 'thing', 's she shows me')
#該命令為分別取出匹配前的字串、匹配的字串和匹配後的字條串
>>> re.search(r'[0123456789-]+', 'the phone number is 1234-567-890')
<re.Match object; span=(20, 32), match='1234-567-890'>
#該命令匹配包含'0'至'9'的資料和'-'符號,即匹配電話號碼
>>> re.search(r'[0123456789-]+', 'the phone number is 1234-567-890').group()
'1234-567-890'
#group()取出匹配的字串
>>> re.search(r'\S+@\S+', 'my email is [email protected]').group()
#'\S':標記除空格外的任何字元,包括特殊字元。該模式為提取電子郵件地址,比較嚴格的模式應該為r'([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)'
>>> re.search(r'([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)', 'my email is jonhn@[email protected]')
<re.Match object; span=(18, 32), match='[email protected]'>
>>> re.search(r'([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)', 'my email is [email protected]')
<re.Match object; span=(12, 29), match='[email protected]'>
>>> match = re.search(r'[0123456789-]+', 'the phone number is 1234-567-890')
>>> [int(n) for n in match.group().split('-')]
[1234, 567, 890]
#取出電話號碼,然後以'-'分隔,並將生成器轉換為列表。
可以使用一些工具互動式地檢查正則表示式。在https://regex101.com可以找到一個免費的線上測試工具。