2.1 re.compile(pattern[, flags])
2.2 re.findall(pattern, string, flags=0)
2.3 re.finditer(pattern, string, flags=0)
2.4 re.match(pattern, string, flags=0)
2.5 re.serach(pattern, string, flags=0)
2.6 re.split(pattern, string[, maxsplit=0, flags=0])
2.7 re.sub(pattern, repl, string, count=0, flags=0)
1. 正則表達式
- 就其本質而言,正則表達式(或RE)是一種小型的、高度專業化的編程語言,它內嵌再Python中,並通過re模塊實現。正則表達式模式被編譯成一系列的字節碼,然後由C編寫的匹配引擎執行。
- 正則表達式用來匹配字符串,用來進行模糊匹配。
- 字符串提供的方法是完全匹配。
- * 、+、?都爲貪婪匹配,也就是儘可能匹配,後面加?號使其編程惰性匹配
1.1 正則表達式符號
[ ]可以取消元字符的特殊功能,元字符僅僅爲其本身(\ ^ -例外)
正則表達式符號 |
描述 |
'.' |
通配符,默認匹配除'\n'之外的任意一個字符 |
'^' |
匹配字符開頭 |
'$' |
匹配字符結尾 |
'*' |
貪婪匹配。匹配前面的子表達式0或多次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。等價於{0, +∞} |
'+' |
匹配前面的子表達式1或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”等價於{1, +∞} |
'?' |
匹配前面的子表達式0或1次。等價於{0, 1} |
'.*' |
匹配除'\n'之外的任意一個字符0或多次 |
'{m}' |
匹配前一個字符m次 |
'{n, m}' |
貪婪匹配。匹配前一個字符至少n次 |
'{n, m}' |
貪婪匹配。匹配前一個字符n到m次 |
'[abc]' |
匹配所包含的任意一個字符 |
'[a-z]' |
匹配指定範圍內的任意字符 |
'[^a-z]' |
匹配任何不在指定範圍內的任意字符 |
'|' |
匹配|左或|右的字符 |
a|b |
匹配a或b |
'\' |
反斜槓後邊跟元字符去除特殊功能,反斜槓後邊跟部分普通字符實現特殊功能 |
'(re)' |
分組匹配,匹配括號內的表達式 |
'\A' |
匹配字符串開始 |
'\b' |
匹配一個單詞的邊界,也就是指單詞和空格間的位置,需加r(原始字符串) |
'\B' |
匹配非單詞邊界。 |
'\d' |
匹配任何十進制數。等價於[0-9] |
'\D' |
匹配任何非數字字符。等價於[^0-9] |
'\G' |
匹配最後匹配完成的位置 |
'\n' |
匹配一個換行符 |
'\s' |
匹配任何不可見字符。等價於[ \f\n\r\t\v]。 |
'\S' |
匹配任何可見字符。等價於[^ \f\n\r\t\v]。 |
'\t' |
匹配一個製表符 |
'\w' |
匹配不包括下劃線的任何字母數字字符或中文。類似但不等價於“[A-Za-z0-9_] |
'\W' |
匹配任何非單詞字符。等價於[^A-Za-z0-9_] |
'\z' |
匹配字符串結束 |
'\Z' |
匹配字符串結束。如果存在換行,只匹配到換行前的結束字符串 |
2. re模塊
方法 |
描述 |
re.compile(pattern[, flags]) |
用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。 |
re.findall(pattern, string, flags=0) |
在字符串中找到正則表達式所匹配的所有子串,並返回一個列表。如果沒有找到匹配的,則返回空列表 |
re.finditer(pattern, string, flags=0)
|
在字符串中找到正則表達式所匹配的所有子串,並把它們作爲一個迭代器返回 |
re.match(pattern, string, flags=0) |
返回只在字符串開始匹配的對象。可以使用group() 或 groups() 匹配對象函數來獲取匹配表達式 |
re.serach(pattern, string, flags=0) |
返回匹配到的第一個對象。可以使用group() 或 groups() 匹配對象函數來獲取匹配表達式 |
re.split(pattern, string[, maxsplit=0, flags=0]) |
按照能夠匹配的子串將字符串分割後返回列表 |
re.sub(pattern, repl, string, count=0, flags=0) |
替換字符串中的匹配項 |
flags參數 |
說明 |
re.l |
使匹配對大小寫不敏感 |
re.L |
做本地化識別匹配(locale-aware) |
re.M |
多行匹配,影響^和$ |
re.S |
使.匹配包括換行在內的所有字符 |
re.U |
根據Unicode字符集解析字符。這個標誌影響\w,\W,\b,\B |
re.X |
該標誌通過給予更靈活的格式以便你將正則表達式寫得更容易理解 |
2.1 re.compile(pattern[, flags])
用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。
>>> import re
>>> a = re.compile('\.com')
>>> a.findall('www.baidu.com')
['.com']
2.2 re.findall(pattern, string, flags=0)
在字符串中找到正則表達式所匹配的所有子串,並返回一個列表。如果沒有找到匹配的,則返回空列表
>>> import re
>>> re.findall('.*', 'hello')
['hello', '']
>>> re.findall('www.(\w+).com', 'www.baidu.com')
['baidu']
>>> re.findall('www.(?:\w+).com', 'www.baidu.com')
['www.baidu.com']
>>> re.findall('\\\\', 'abc\de')
['\\']
>>> re.findall(r'\\', 'abc\de')
['\\']
>>> re.findall('<a>(.*?)</a>',li)
['這個是內容', '這個是內容']
>>> li = '<div><ul><li><a>這個是內容</a></閃電></ul><ul><li><a>這個是內容</a></閃電></ul></div>'
>>> re.findall('<a>(.*)</a>',li) #貪婪匹配
['這個是內容</a></閃電></ul><ul><li><a>這個是內容']
>>> re.findall('<a>(.*?)</a>',li) #惰性匹配
['這個是內容', '這個是內容']
2.3 re.finditer(pattern, string, flags=0)
在字符串中找到正則表達式所匹配的所有子串,並把它們作爲一個迭代器返回
>>> import re
>>> a = re.finditer('\d', 'adf12345afds')
>>> print(next(a).group())
1
>>> print(next(a).group())
2
>>> print(next(a).group())
3
>>> print(next(a).group())
4
>>> print(next(a).group())
5
2.4 re.match(pattern, string, flags=0)
返回只在字符串開始匹配的對象。可以使用group() 或 groups() 匹配對象函數來獲取匹配表達式
>>> import re
>>> html = "<a>這是一個超鏈接!</a>"
>>> re.match('<(\w+)>.*</(\w+)>',html)
<re.Match object; span=(0, 15), match='<a>這是一個超鏈接!</a>'>
>>> re.findall('<a>(.*)</a>',html)
['這是一個超鏈接!']
>>> ret = re.match('<a>(.*)</a>', html) #分組匹配
>>> ret.group()
'<a>這是一個超鏈接!</a>'
>>> ret.group(1)
'這是一個超鏈接!'
2.5 re.serach(pattern, string, flags=0)
返回匹配到的第一個對象。可以使用group() 或 groups() 匹配對象函數來獲取匹配表達式
>>> import re
>>> ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})', 'weeew34ttt123/ooo')
>>> ret.group()
'123/ooo'
>>> ret.group('id')
'123'
>>> ret.group('name')
'ooo'
2.6 re.split(pattern, string[, maxsplit=0, flags=0])
按照能夠匹配的子串將字符串分割後返回列表
>>> import re
>>> re.split('[b]', 'abcdabcdabcd')
['a', 'cda', 'cda', 'cd']
>>> re.split('[bd]', 'abcdabcdabcd')
['a', 'c', 'a', 'c', 'a', 'c', '']
>>> re.split('[ab]', 'abcdabcdabcd')
['', '', 'cd', '', 'cd', '', 'cd']
2.7 re.sub(pattern, repl, string, count=0, flags=0)
替換字符串中的匹配項
>>> import re
>>> re.sub('p.*n', 'world', 'hello,python')
'hello,world'
>>> re.sub('\d', 'abc', 'p1p2p3')
'pabcpabcpabc'