如果你對正則感興趣,讀完這篇文章,一定會有收獲~_^
簡單來說
正則一般代指正則表達(dá)式
正則表達(dá)式是從"復(fù)雜數(shù)據(jù)"中抽取"有用數(shù)據(jù)"的公式
寫好正則表達(dá)式的兩個(gè)要點(diǎn):
1.正確匹配字符數(shù)量(相關(guān)符號:*
,+
,?
,{}
)
2.正確匹配字符種類(相關(guān)符號:除上面符號以外的其它符號^_~)
相關(guān)符號
.
代表"萬能匹配";//可以匹配除了"\n"
(換行符)之外的任何單個(gè)字符
?
代表"不要貪婪";//用在*
,+
,?
后面,表示匹配的越少越好
?
也代表"非〇即一";
^
代表"除了你";//在中括號內(nèi),如[^_]
表示單個(gè)非下劃線字符
^
也代表"匹配首位";
$
代表"匹配末位";
*
代表"〇至無窮"; //大于等于0的整數(shù)
+
代表"一至無窮";//大于等于1的整數(shù)
|
代表"我們都一樣";//|
表示"或"
\d
代表"匹配數(shù)字";//0-9
\D
代表"匹配非\d
"
\w
代表"匹配字符";//0-9,A-Z,a-z,_
\W
代表"匹配非\w
"
幾個(gè)括號
大括號{}
用來確定數(shù)量
re.match
表示正則模塊里面的match函數(shù)(match函數(shù)默認(rèn)從字符串首部開始匹配),\d
匹配單個(gè)數(shù)字{3}
代表匹配3個(gè)
中括號[]
用來確定匹配字符的種類
第一種寫法
re.match(r"[123]{1}根煙","1根煙")
re.match(r"[123]{1}根煙","2根煙")
re.match(r"[123]{1}根煙","3根煙")
中括號內(nèi)的123可匹配單個(gè)1或2或3
第二種寫法
re.match(r"[1,2,3]{1}根煙","1根煙")
re.match(r"[1,2,3]{1}根煙","2根煙")
re.match(r"[1,2,3]{1}根煙","3根煙")
小括號()
用來為表達(dá)式整體匹配后,"按需提取"(經(jīng)常和函數(shù)group配合使用)
如提取域名中的詞組(以簡書域名為例)
re.match(r".*//.*?\.+(.*?)\.+[^\.]*","http://www.bilibili.com").group(1)
什么是貪婪匹配?
- 貪婪的總是嘗試匹配盡可能多的字符厢漩;(大多編程語言的正則默認(rèn)貪婪)
- 在
*
,?
,+
,{m,n}
后面加上?
即可使貪婪變成非貪婪.
寫在最后
- 正則表達(dá)式相當(dāng)于編程的小九九,背的時(shí)候有點(diǎn)惡心,但用起來非常爽!
- 正則表達(dá)式,最早用于唯一標(biāo)示復(fù)雜的神經(jīng)網(wǎng)絡(luò),現(xiàn)可用于"唯一標(biāo)示"某個(gè)字符串,也就是"唯一匹配"字符串
- 正則表達(dá)式使用了大量的特殊字符,這些特殊字符在不同的語境下還會有不同的含義,所以正則的表達(dá)式看起來有點(diǎn)像亂碼(表象無序的亂碼,底層極致的規(guī)范)