站長(zhǎng)在線Python精講:Python中正則表達(dá)式的語(yǔ)法詳解
導(dǎo)讀:歡迎你來(lái)到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)Python知識(shí),本文學(xué)習(xí)的是《Python中正則表達(dá)式的語(yǔ)法詳解》。本知識(shí)點(diǎn)主要內(nèi)容有9點(diǎn):行定位符、元字符、限定符、字符集、排除字符、選擇字符、轉(zhuǎn)義字符、分組、在Python中使用正則表達(dá)式語(yǔ)法。
永久美國(guó)免備案虛擬主機(jī)1元1天,15元1月,100元1年,1000元永久
站長(zhǎng)在線旗下答案網(wǎng)站,全站所有題目,免費(fèi)查看答案和答案解析
歡迎你來(lái)到站長(zhǎng)在線的站長(zhǎng)學(xué)堂學(xué)習(xí)python知識(shí),本文學(xué)習(xí)的是《Python中正則表達(dá)式的語(yǔ)法詳解》。本知識(shí)點(diǎn)主要內(nèi)容有9點(diǎn):行定位符、元字符、限定符、字符集、排除字符、選擇字符、轉(zhuǎn)義字符、分組、在Python中使用正則表達(dá)式語(yǔ)法。
關(guān)于Python中的正則表達(dá)式,準(zhǔn)備分兩個(gè)知識(shí)點(diǎn)講完,今天來(lái)講解正則表達(dá)式的語(yǔ)法。
正則表達(dá)式的概念:正則表達(dá)式(regular expression,簡(jiǎn)稱regex或者RE),也稱為歸則表達(dá)式。通常用來(lái)檢索、替換符合某些規(guī)則的文本。正則表達(dá)式就是記錄文本規(guī)則的代碼。
1、行定位符
行定位符就是用來(lái)描述字符串的邊界?!癪”表示行的開(kāi)始;“$”表示行的結(jié)尾。
例如:
One is All
All is One
^One
該表達(dá)式表示要匹配字符串One的開(kāi)始位置是行頭,如One is All就可以匹配,而All is One則不匹配。但如果使用:
One$
則All is One可以匹配,而One is All不能匹配。如果要匹配的字符串可以出現(xiàn)在字符串的任意部分,那么可以直接寫(xiě)成:
One
這樣,兩個(gè)字符串就都可以匹配了。
2、元字符
元字符就是在正則表達(dá)式中具有特殊意義的專用字符。
剛才我們所說(shuō)的“^”和“$”就是元字符,在Python有下面常用元字符:.、\w、\W、\s、\S、\d、\D、\b、^、$。
各種元字符及其說(shuō)明如下:
.:匹配除換行符以外的任意字符
\W:匹配特殊字符,即非字母、非數(shù)字、非漢字
\s:匹配任意的空白符
\S:匹配非空白
\d:匹配數(shù)字
\D:匹配非數(shù)字,即不是數(shù)字
\b:匹配單詞的開(kāi)始或結(jié)束
^:匹配字符串的開(kāi)始
$:匹配字符串的結(jié)束
我們來(lái)看一個(gè)例子:
\byi\w*\b
匹配以字母yi開(kāi)頭的單詞,先匹配單詞開(kāi)始處(\b),然后匹配字母yi,接著匹配任意數(shù)量的字母或數(shù)字(\w*),最后匹配單詞結(jié)束處(\b)。該表達(dá)式可以匹配如“yibenshu”“saneryi”“haoyige”“yi12345”等。
3、限定符
在上面的元字符的例子中,使用“\w*”匹配任意數(shù)量的字母或數(shù)字。如果想匹配特定數(shù)量的數(shù)字,該如何表示呢?正則表達(dá)式為我們提供了限定符(指定數(shù)量的字符)來(lái)實(shí)現(xiàn)該功能。
例如,匹配6位qq號(hào)可用如下表達(dá)式:
^\d{6}$
常用的限定符如下所示:*、+、?、{n} 、{n,}、{n,m}、[] 。
各種限定符及說(shuō)明及舉例如下:
* :匹配前面的字符零次或更多次。例如“zo*”能匹配“z” “zo”以及“zoo”,“*”等效于“{0,}”
+ :匹配前面的字符一次或更多次。例如“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”,“+”等效于"{1,}”
? :匹配前面的字符零次或一次。例如“do(es)?”可以匹配 “do”或 “does”中的“do”,“?”等效 于 “{0,1}”
{n} :匹配前面的字符n次。例如“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food” 中的兩個(gè) o
{n,} :匹配前面的字符n次或更多次。例如“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o, 等效于“o+”,“o{0,}”則等效于“o*”
{n,m} :匹配前面的字符n到m次。其中 n<=m。最少匹配 n 次且最多匹配 m 次。例如“o{1,3}”將匹配“fooooood" 中的前三個(gè)“o”,“o{0,l}”等效于“0?”。注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格
4、字符集
正則表達(dá)式查找數(shù)字和字母是很簡(jiǎn)單的,因?yàn)橐呀?jīng)有了對(duì)應(yīng)這些字符集合的元字符(如\d,\w),但是如果要匹配沒(méi)有預(yù)定義元字符的字符集合(比如元音字母a, e, i, o, u),應(yīng)該怎么辦?很簡(jiǎn)單,只需要在方括號(hào)里列出它們就行了,像[aeiou]就匹配任何一個(gè)英文元音字母。
[xyz]表示匹配里面的任意一個(gè)字符。
[a-z]字符范圍,匹配指定范圍內(nèi)的任意字符。例如“[a-z]”可以匹配“a”到“z”范圍內(nèi)的任意小寫(xiě)字母字符
[.?!]匹配標(biāo)點(diǎn)符號(hào)“.”、“?”或“!”。也可以輕松地指定一個(gè)字符范圍,像[0-9]代表的含義與\d就是完全一致的:代表一位數(shù)字;同理,[a-z0-9A-Z_]也完全等同于\w(如果只考慮英文的話)。
要想匹配給定字符串中任意一個(gè)漢字,可以使用[\u4e00-\u9fa5];如果要匹配連續(xù)多個(gè)漢字,可以使用[\u4e00-\u9fa5]+。
5、排除字符
上方的字符集是匹配符合指定字符集的字符串。這里的排除字符,剛剛相反。排除字符就是匹配不符合指定字符集的字符串。在正則表達(dá)式中用“^”表示。我們?cè)谧铋_(kāi)始的行定位符中也說(shuō)到了“^”,放在開(kāi)頭,在這里放在方括號(hào)[]里面,表示排除的意思。如:
[^a-zA-Z]
表示用于一個(gè)匹配非字母的字符。
6、選擇字符
Python中的選擇字符,包含著條件選擇的邏輯,在這里使用“|”來(lái)表示。該字符可以理解為“或”。
如中國(guó)人的身份證號(hào)碼長(zhǎng)度為15位或者18位。如果為15位,則全為數(shù)字;如果為18位,前17位為數(shù)字,最后一位是校驗(yàn)位,可能為數(shù)字或字符X。
匹配身份證的表達(dá)式可以寫(xiě)出如下方式:
(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$
該表達(dá)式的意思是可以匹配15位數(shù)字,或者18位數(shù)字,或者17位數(shù)字和最后一位。最后一位可以是數(shù)字或者是X或者是x。
7、轉(zhuǎn)移字符
正則表達(dá)式中的轉(zhuǎn)義字符(\)和Python中的大同小異,都是將特殊字符(如“.”“?”“\”等)變?yōu)槠胀ǖ淖址?/span>
舉一個(gè)IP地址的實(shí)例,用正則表達(dá)式匹配如127.0.0.1這樣格式的IP地址。如果直接使用點(diǎn)字符,格式為:
[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
這顯然不對(duì),因?yàn)椤?”可以匹配一個(gè)任意字符。這時(shí),不僅是127.0.0.1這樣的IP,連127101011這樣的字串也會(huì)被匹配出來(lái)。所以在使用“.”時(shí),需要使用轉(zhuǎn)義字符(\)。修改后,上面的正則表達(dá)式格式為:
[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
站長(zhǎng)在線提醒你:括號(hào)在正則表達(dá)式中也算是一個(gè)元字符。
8、分組
通過(guò)上面選擇字符中的例子,可以看見(jiàn)小括號(hào)的作用有了一定的了解。
小括號(hào)字符的第一個(gè)作用就是可以改變限定符的作用范圍,如“|”“*”“^”等。來(lái)看下面的一個(gè)表達(dá)式。
(mon|ma)th
這個(gè)表達(dá)式的意思是匹配單詞month或math,如果不使用小括號(hào),那么就變成了匹配單詞mon和math了。
小括號(hào)的第二個(gè)作用是分組,也就是子表達(dá)式。例如(\.[0-9]{1,3}){3},就是對(duì)分組(\.[0-9]{1,3})進(jìn)行重復(fù)操作。
9、在Python中使用正則表達(dá)式語(yǔ)法
在Python中使用正則表達(dá)式時(shí),是將其作為模式字符串使用的。例如,將匹配不是字母的一個(gè)字符的正則表達(dá)式表示為模式字符串,可以使用下面的代碼:
'[^a-zA-Z]'
而如果將匹配以字母m開(kāi)頭的單詞的正則表達(dá)式轉(zhuǎn)換為模式字符串,則不能直接在其兩側(cè)添加引號(hào)定界符,例如,下面的代碼是不正確的。
'\bm\w*\b'
而是需要將其中的“\”進(jìn)行轉(zhuǎn)義,轉(zhuǎn)換后的代碼為:
'\\bm\\w*\\b'
由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要寫(xiě)為原生字符串,即在模式字符串前加r或R。例如,上面的模式字符串采用原生字符串表示就是:
r'\bm\w*\b'
在編寫(xiě)模式字符串時(shí),并不是所有的反斜杠都需要進(jìn)行轉(zhuǎn)換。例如,前面編寫(xiě)的正則表達(dá)式“^\d{6}$”中的反斜杠就不需要轉(zhuǎn)義,因?yàn)槠渲械腬d并沒(méi)有特殊意義。不過(guò),為了編寫(xiě)方便,本教程所寫(xiě)正則表達(dá)式都采用原生字符串表示。
到此為止,本文學(xué)習(xí)的《Python中正則表達(dá)式的語(yǔ)法詳解》中的主要內(nèi)容有9點(diǎn):行定位符、元字符、限定符、字符集、排除字符、選擇字符、轉(zhuǎn)義字符、分組、在Python中使用正則表達(dá)式語(yǔ)法。就全部講解完畢了。有問(wèn)題,可以給我留言哦!
下一個(gè)知識(shí)點(diǎn),我們講解《在Python中使用re模塊實(shí)現(xiàn)正則表達(dá)式操作詳解》。歡迎你對(duì)站長(zhǎng)在線進(jìn)行關(guān)注,評(píng)論,點(diǎn)贊,分享、轉(zhuǎn)發(fā)!
本文地址:http://003188.cn/pythonzhengzebiaodashideyufa.html
阿里云虛擬主機(jī)1G空間,120元一年
香港、美國(guó)虛擬主機(jī)100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡