介紹:
- 正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特殊字符及這些特定字符的組合,組成一個(gè) “規(guī)則字符串”, 這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種邏輯過濾。
- 非python獨(dú)有
- python里面是使用re模塊來實(shí)現(xiàn)的,不需要額外進(jìn)行安裝,是python內(nèi)置模塊
常見匹配模式:
模式 | 描述 |
---|---|
\w | 匹配字母數(shù)字及下劃線 |
\W | 匹配非字母數(shù)字下劃線 |
\s | 匹配任意空白字符,等價(jià)于 [\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意數(shù)字,等價(jià)于 [0-9] |
\D | 匹配任意非數(shù)字 |
\A | 匹配字符串開始 |
\Z | 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串 |
\z | 匹配字符串結(jié)束 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一個(gè)換行符 |
\t | 匹配一個(gè)制表符 |
^ | 匹配字符串的開頭 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符。 |
[…] | 用來表示一組字符,單獨(dú)列出:[amk] 匹配 ‘a(chǎn)’,‘m’或’k’ |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
* | 匹配0個(gè)或多個(gè)的表達(dá)式。 |
+ | 匹配1個(gè)或多個(gè)的表達(dá)式。 |
? | 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式 |
{n} | 精確匹配n個(gè)前面表達(dá)式。 |
{n, m} | 匹配 n 到 m 次由前面的正則表達(dá)式定義的片段,貪婪方式 |
a|b | 匹配a或b |
( ) | 匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組 |
注 意:
- .*? 非常常用
- ^和$表示匹配的位置,一般不含有實(shí)際匹配意義
re.match()方法:
re.match()方法嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回None
語法:
變量名 = re.match(正則表達(dá)式,待匹配字符串)
常規(guī)匹配:
這種匹配一般比較精確而具體
#舉個(gè)例子:
#導(dǎo)入模塊包
import re
content = 'Hello 123 456789 World_This is a Regex Demo' # 準(zhǔn)備好的待匹配字符串
res=re.match('^Hello\s\d\d\d\s\d{6}\s\w{10}.*Demo$', content)
print(res) # 返回的是一個(gè)匹配對(duì)象
print(res.group()) # .group()獲取匹配內(nèi)容
print(res.span()) # 查看匹配長(zhǎng)度
print(len(content)) # len統(tǒng)計(jì)字符串?dāng)?shù)量
呈現(xiàn)效果:
- 直接打印返回的是一個(gè)對(duì)象,所以我們要通過group進(jìn)行輸出,group從1開始,沒寫參數(shù)表示全部輸出匹配內(nèi)容。
- 第二行的意思是,從0開始,長(zhǎng)度為43,計(jì)算規(guī)則(43-0)第二個(gè)參數(shù)減去第一個(gè)參數(shù)就是長(zhǎng)度。
泛匹配:
匹配很寬泛,根據(jù)幾個(gè)關(guān)鍵詞展現(xiàn)匹配的相關(guān)內(nèi)容。
#舉個(gè)例子:
import re
content = 'Hello 123 4567 World_Thixs is a Regex'
result = re.match("He.*?Regex",content)
print(result.group())#獲取匹配內(nèi)容
print(result.span())#獲取匹配長(zhǎng)度
呈現(xiàn)效果:
匹配目標(biāo)-匹配分組:
為了匹配字符串中具體的目標(biāo),可以使用()進(jìn)行分組匹配
#舉個(gè)例子:
import re
content = 'qwe Hello 1234567 World_This is a Regex Demo'
# 在匹配目標(biāo)值的時(shí)候 目標(biāo)值的前后特征一定要給明確(原樣保留)(限定)
result = re.match('qwe\s(\w+)\s(\d{7}).*Demo',content)
print(result.group()) # 獲取匹配內(nèi)容
print(result.group(1)) # 提取第一組表達(dá)式內(nèi)匹配到的字符
print(result.group(2)) # 提取第二組表達(dá)式內(nèi)匹配的字符
- group的數(shù)從1開始,括號(hào)內(nèi)的數(shù)據(jù)就是分組的數(shù)據(jù)
- 空格要用\s替換(推薦)
- +號(hào)表示匹配至少一個(gè),通過\w+把字母串"Hello"匹配掉,通過\d{7}表示匹配七個(gè)任意數(shù)字
貪婪匹配:
盡可能多的去匹配,最大可能匹配多的字符
#舉個(gè)例子:
import re
# 匹配盡可能多的字符
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+)\s.*Demo$', content)
print(result)
print(result.group(1))
呈現(xiàn)效果:
- 因?yàn)椴捎玫氖秦澙菲ヅ?,所以它?huì)盡可能多匹配,d+只要求至少一個(gè)數(shù)字,那么貪婪匹配就只會(huì)給它留一個(gè)。
非貪婪匹配:
盡可能少的去匹配
#舉個(gè)例子:
import re
# 匹配盡可能少的字符
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$', content)
print(result)
print(result.group(1))
呈現(xiàn)效果:文章來源:http://www.zghlxwxcb.cn/news/detail-433339.html
因?yàn)橐M可能少的去匹配,所以d+直接匹配了七個(gè)數(shù)字,.*? 可以以任意長(zhǎng)度,那么0長(zhǎng)度也可以。文章來源地址http://www.zghlxwxcb.cn/news/detail-433339.html
到了這里,關(guān)于【正則表達(dá)式上】——03全棧開發(fā)——如桃花來的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!