*正則表達式: 是用於快速從一大堆字元中快速找出想要的子字元串的一種表達方式 , 函數+表達方式=快速找出子字元串。 在正則表達式中,如果直接給出字元,就是精確匹配。用\d可以匹配一個數字,\w可以匹配一個字母或數字,所以: '00\d'可以匹配'007',但無法匹配'00A'; '\d\d\d'可 ...
*正則表達式: 是用於快速從一大堆字元中快速找出想要的子字元串的一種表達方式 , 函數+表達方式=快速找出子字元串。
在正則表達式中,如果直接給出字元,就是精確匹配。用\d可以匹配一個數字,\w可以匹配一個字母或數字,所以:
'00\d'可以匹配'007',但無法匹配'00A';
'\d\d\d'可以匹配'010';
'\w\w\d'可以匹配'py3';
.可以匹配任意字元,所以: 'py.'可以匹配'pyc'、'pyo'、'py!'等等。
要匹配變長的字元,在正則表達式中,用*表示任意個字元(包括0個),用+表示至少一個字元,用?表示0個或1個字元,用{n}表示n個字元,用{n,m}表示n-m個字元.
貪婪匹配: 正則匹配預設是貪婪匹配,也就是匹配儘可能多的字元。
1.正則表達式re.match()函數: 原型==> match(正則表達式, 要匹配的字元串, flags=0)
功能: 從字元串的起始位置匹配一個模式, 如果沒有匹配到就返回None.
2.正則表達式re.search()函數: 原型==> search(正則表達式, 要匹配的字元串, flags=0)
功能: 掃描整個字元串, 並返回第一個成功的匹配.
3.正則表達式re.findall()函數: 原型==> findall(正則表達式, 要匹配的字元串, flags=0)
功能: 掃描整個字元串, 並返回整個結果列表.
flags: 標誌位, 用於控制正則表達式的匹配方式, 有以下6個值:
re.I: 忽略大小寫
re.L: 做本地化識別(基本用不上)
re.M: 多行匹配, 影響^和$
re.S: 使.匹配包括換行符在內的所有字元
re.U: 根據Unicode字元集解析字元, 影響\w \W \b \B
re.X: 使我們以更靈活的格式理解正則表達式(也不常用)
^: 匹配是不是以某某開頭的, 如果不是則返回None
$: 匹配是不是以某某結尾的, 如果不是則返回None
[34578]: 取34578中的任意一個.
==> 分組: 除了簡單地判斷是否匹配之外,正則表達式還有提取子串的強大功能。用()表示的就是要提取的分組(Group)。比如:
>>>str = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>>str
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> str.group(0)
'010-12345'
>>> str.group(1)
'010'
>>> str.group(2)
'12345'
>>> str.groups()
('010-12345', '010', '12345')
==> 編譯: 如果一個正則表達式要重覆使用幾千次,出於效率的考慮,我們可以預編譯該正則表達式,接下來重覆使用時就不需要編譯這個步驟了,直接匹配.
>>>re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
>>> re_telephone.match('010-12345').group(1)
'010'
>>> re_telephone.match('027-12345').group(1)
'027'