網(wǎng)站建設(shè)對(duì)產(chǎn)品推銷作用大嗎百度云搜索引擎入口盤多多
文章目錄
- 函數(shù)
- re.match函數(shù)
- re.search函數(shù)
- re.findall函數(shù)
- re.compile函數(shù)
- re.sub函數(shù)
- re.split函數(shù)
- 修飾符
- 正則表達(dá)式模式
- 正則表達(dá)式實(shí)例
函數(shù)
re.match函數(shù)
re.match()函數(shù)用于嘗試從字符串的 起始位置 匹配一個(gè)模式,匹配成功返回一個(gè)匹配對(duì)象,否則返回None。
函數(shù)語(yǔ)法:re.match(pattern, string, flags=0)
實(shí)例:
import re# case_01
print(re.match(r'\d{4}-\d{2}-\d{2}', '2023-03-15'))
print(re.match(r'\d{4}-\d{2}-\d{2}', 'date:2023-03-15'))# case_02
line = "Dogs are smarter than cats"matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj:print("matchObj.group() : ", matchObj.group())print("matchObj.group(1) : ", matchObj.group(1))print("matchObj.group(2) : ", matchObj.group(2))print("matchObj.group(1,2) : ", matchObj.group(1,2))print("matchObj.groups() : ", matchObj.groups())else:print("No match!")
結(jié)果如下:
使用 group(num) 或 groups() 匹配對(duì)象函數(shù)來(lái)獲取匹配表達(dá)式:
group(num=0): 匹配的整個(gè)表達(dá)式的字符串,group() 可以一次輸入多個(gè)組號(hào),在這種情況下它將返回一個(gè)包含那些組所對(duì)應(yīng)值的元組。
groups(): 返回一個(gè)包含所有小組字符串的元組,從 1 到 所含的小組號(hào)。
re.search函數(shù)
re.search()函數(shù)用于掃描 整個(gè)字符串 并返回第一個(gè)成功的匹配,否則返回None。
函數(shù)語(yǔ)法: re.search(pattern, string, flags=0)
實(shí)例:
import re# case_01
print(re.search(r'\d{4}', 'abc1234'))
print(re.search(r'\d{4}', '123abc'))
print(re.search(r'\d{4}', 'abc0000d1234'))# case_02
line = "2斤黃瓜賣8.8元"pattern = r'(\d)斤(.*)賣(\d+(\.\d+)?)元'
matchObj = re.search(pattern, line, re.M|re.I)if matchObj:print(f'{matchObj.group(1)}\t{matchObj.group(2)}\t{matchObj.group(3)}')
else:print("No match!")
結(jié)果如下:
re.match與re.search的區(qū)別:
re.match只匹配字符串的開始,如果字符串開始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回None;
而re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。
re.findall函數(shù)
re.findall()函數(shù)用于在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果有多個(gè)匹配模式,則返回元組列表,如果沒(méi)有找到匹配的,則返回空列表。
函數(shù)語(yǔ)法: findall(string[, pos[, endpos]])
實(shí)例:
import re# case_01
content = "郵箱:qa@123.com;qa@456.com"
pattern = re.compile(r"""[a-zA-Z0-9-_]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}
""", re.VERBOSE)result1 = pattern.findall(content)
result2 = pattern.findall(content, 0, 13)
print(result1)
print(result2)# case_02
result3 = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result3)
結(jié)果如下:
re.compile函數(shù)
re.compile()函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式( Pattern )對(duì)象。
函數(shù)語(yǔ)法: re.compile(pattern[, flags])
實(shí)例:
import repattern = re.compile(r'\d+')
print(pattern.match('abc123'))
print(pattern.match('abc123', 3, 5))
print(pattern.search('abc123'))
print(pattern.findall('abc123efg456'))
結(jié)果如下:
re.sub函數(shù)
re.sub()函數(shù)用于替換字符串中的匹配項(xiàng)。
函數(shù)語(yǔ)法: re.sub(pattern, repl, string, count=0, flags=0)
實(shí)例:
import recontent = '手機(jī)號(hào)碼:13580536956'pattern = r'(1[3-9][0-9])\d{4}([0-9]{4})'print(re.sub(pattern, r'\1****\2', content)) #手機(jī)號(hào)碼:135****6956
re.split函數(shù)
re.split()函數(shù)按照能夠匹配的子串將字符串分割后返回列表。
函數(shù)語(yǔ)法: re.split(pattern, string[, maxsplit=0, flags=0])
實(shí)例:
import reprint(re.split('\W+', 'abc, 123, .!?'))
print(re.split('\W+', 'abc, 123, .!?', 1)) # 分隔1次
print(re.split('d', 'abc, 123, .!?')) # 找不到匹配的字符串不會(huì)分割
結(jié)果如下:
修飾符
正則表達(dá)式可以包含一些可選標(biāo)志修飾符來(lái)控制匹配的模式。修飾符被指定為一個(gè)可選的標(biāo)志。多個(gè)標(biāo)志可以通過(guò)按位 OR(|) 來(lái)指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志。
修飾符 | 描述 |
---|---|
re.I | 使匹配對(duì)大小寫不敏感 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 使 . 匹配包括換行在內(nèi)的所有字符 |
re.U | 根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B. |
re.X | 該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解 |
正則表達(dá)式模式
修飾符 | 描述 |
---|---|
^ | 匹配字符串的開頭 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符 |
[…] | 用來(lái)表示一組字符,單獨(dú)列出:[abc] 匹配 ‘a(chǎn)’,‘b’或’c’ |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
re* | 匹配0個(gè)或多個(gè)的表達(dá)式 |
re+ | 匹配1個(gè)或多個(gè)的表達(dá)式。 |
re? | 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式 |
re{n} | 精確匹配 n 個(gè)前面表達(dá)式。例如, o{2}不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的兩個(gè)o。 |
re{n,} | 匹配 n 個(gè)前面表達(dá)式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o?!皁{1,}” 等價(jià)于 “o+”?!皁{0,}” 則等價(jià)于 “o*”。 |
re{n, m} | 匹配n到m次由前面的正則表達(dá)式定義的片段,貪婪方式 |
a|b | 匹配a或b |
(re) | 對(duì)正則表達(dá)式分組并記住匹配的文本 |
\w | 匹配字母數(shù)字及下劃線,等價(jià)于[a-zA-Z0-9_] |
\W | 匹配非字母數(shù)字及下劃線,等價(jià)于[^a-zA-Z0-9_] |
\s | 匹配任意空白字符,等價(jià)于 [\t\n\r\f\v]。 |
\S | 匹配任意非空字符,等價(jià)于[^\t\n\r\f\v] |
\d | 匹配任意數(shù)字,等價(jià)于 [0-9]. |
\D | 匹配任意非數(shù)字,等價(jià)于[^0-9] |
\n, \t, 等. | 匹配一個(gè)換行符。匹配一個(gè)制表符。等 |
\1…\9 | 匹配第n個(gè)分組的內(nèi)容。 |
正則表達(dá)式實(shí)例
實(shí)例 | 描述 |
---|---|
n位數(shù)字 | ^\d{n}$ |
至少n位數(shù)字 | ^\d{n,}$ |
m-n位數(shù)字 | ^\d{m,n}$ |
由26個(gè)小寫英文字母組成的字符串 | ^[a-z]+$ |
Email地址 | ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$ |
手機(jī)號(hào)碼 | ^(14[5|7]|(13|15|18)[0-9])\d{8}$ |
國(guó)內(nèi)電話號(hào)碼(0511-4405222、021-87888822) | \d{3}-\d{8}|\d{4}-\d{7} |
身份證號(hào)(15位、18位數(shù)字),最后一位是校驗(yàn)位,可能為數(shù)字或字符X | (^\d{15}$)|(^\d{17}(\d|X|x)$) |
密碼(以字母開頭,長(zhǎng)度在6~18之間,只能包含字母、數(shù)字和下劃線) | ^[a-zA-Z]\w{5,17}$ |
日期格式 | ^\d{4}-\d{1,2}-\d{1,2} |