概述
世界上信息非常多几苍,而因?yàn)殛P(guān)注信息有限∈唇現(xiàn)在需要把關(guān)注的信息提取出來挎峦,香追,此時(shí)就用一種表達(dá)式對(duì)數(shù)據(jù)進(jìn)行提取。正則表達(dá)式就是其中的一種坦胶,在python中還有beautifulsoup透典、xpath等等
原子
原子是正則中最基本的組成單位,每個(gè)表達(dá)式至少包含一個(gè)原子顿苇,原子類型有:
- 普通字符作為原子
- 非打印字符作為原子
- 通用字符作為原子
- 原子表
import re #導(dǎo)入正則
#普通字符為原子
string = "ilovepython"
pat = "py"
rst = re.search(pat,string)
print(rst)
#非打印字符作為原子
string2 = '''
wo
xi
huan
python
!
'''
pat2 = "\n"
rst2 = re.search(pat2,string2)
print(rst2)
常用的通用字符
\w 字母峭咒、數(shù)據(jù)、下劃線
\W 除字母纪岁、數(shù)字凑队、下劃線
\d 十進(jìn)制數(shù)字
\s 除十進(jìn)制數(shù)字
\S 空白字符
原子表
import re
string = "hellopython"
pat = "ll[aoc]p"
rst = re.search(pat,string)
print(rst)
這里的原子表表示在該列表里面匹配任意一個(gè)有效字符,然后返回
元字符
. 匹配除了換行符的任意字符
^ 匹配開始位置
$ 匹配結(jié)束位置
*代表前邊的原子重復(fù)出現(xiàn)0次幔翰、1次或者多次
?代表前邊的原子重復(fù)出現(xiàn)0次或者1次
+代表前邊的原子重復(fù)出現(xiàn)1次或者多次
[n] 恰好出現(xiàn)n次
[n,] 至少出現(xiàn)n次
[n,m] 至少n次漩氨,最多m次
| 模式選擇符
() 單元模塊
模式修正符
所謂的模式修正符,即可以在不改變正則表達(dá)式的情況下遗增,通過模式修政符改變正則表達(dá)式的含義叫惊,從而實(shí)現(xiàn)匹配結(jié)果的調(diào)整等功能。
I 匹配時(shí)忽略大小寫
M 多行匹配
L 本地化識(shí)別匹配
U unicode
S 讓.匹配包括換行
string = "Python"
pat = "pyt"
rst = re.search(pat,string,re.I) #忽略大小寫
print(rst)
貪婪模式與懶惰模式
貪婪模式的核心就是盡可能多的匹配做修,而懶惰模式就是盡可能少的匹配霍狰。
#貪婪模式
string = "Pythony"
pat = "p.*y"
rst = re.search(pat,string,re.I) #默認(rèn)貪婪模式抡草,匹配多個(gè)結(jié)果返回
print(rst)
#懶惰模式
string = "Pythony"
pat = "p.*y"
rst = re.search(pat,string,re.I) #默認(rèn)貪婪模式,匹配多個(gè)結(jié)果返回
print(rst)
正則表達(dá)式的函數(shù)
本身不會(huì)實(shí)現(xiàn)任何功能蚓耽,只是進(jìn)行匹配
re.match()
從開頭開始匹配
#匹配不成功
string = "Python"
pat = "oyt"
rst = re.match(pat,string,re.I) #忽略大小寫
print(rst)
#成功匹配
string = "Python"
pat = "pyt"
rst = re.match(pat,string,re.I) #忽略大小寫
print(rst)
re.search()
從任意地方開始匹配
全局匹配
全局匹配格式
re.compile(正則表達(dá)式).findall(數(shù)據(jù))
string = "PythonyPypsdddfypdfgfdy"
pat = "p.*?y"
rst = re.compile(pat).findall(string)
print(rst)
常見的實(shí)例
匹配網(wǎng)址(.com或者.cn)
string = "(<a
pat = "[a-zA-Z]+://[^\s]*[.com|.cn]"
rst = re.compile(pat).findall(string)
print(rst)
匹配電話號(hào)碼
string4 = "as010-27302284dhscn0933-2710228kdwlnckdshidfohwiohios"
pat4 = "\d{4}-\d{7}|\d{3}-\d{8}"
rst4 = re.compile(pat4).findall(string4)
print(rst4)