Python - 正則表達式

*正則表達式: 是用於快速從一大堆字符中快速找出想要的子字符串的一種表達方式 , 函數+表達方式=快速找出子字符串。
 在正則表達式中,若是直接給出字符,就是精確匹配。正則表達式

精確匹配:函數

用\d能夠匹配一個數字,\w能夠匹配一個字母或數字,因此:
'00\d'能夠匹配'007',但沒法匹配'00A';
'\d\d\d'能夠匹配'010';
'\w\w\d'能夠匹配'py3';
.能夠匹配任意的字符,因此: 'py.'能夠匹配'pyc'、'pyo'、'py!'等等。spa

匹配變長字符:
要匹配變長的字符,在正則表達式中,用*表示任意個數字符(包括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
$: 匹配是否是以某某結尾的, 若是不是則返回Nonecode

[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'字符串