
【一】神秘的寶藏
話說編程世界里各派明爭暗斗不斷,只因所有幫派都在爭奪一個名為“主流語言”的絕世寶藏,據(jù)說誰得到它就可以稱霸武林、一統(tǒng)天下……
某日武林大會之上,各派又在討論尋寶一事。擁躉最多的Java率先發(fā)言:憑我“面向?qū)ο?/b>”如此雄厚的家庭背景,和我的絕殺技——“跨平臺應(yīng)用”劍法。誰能比的了我?這寶藏非我莫屬。
此語一出,頓時四座皆驚。首先資歷最老的C語言就發(fā)話了:年輕人,切勿魯莽。先不說我家的祖?zhèn)骷挤ㄒ苹ń幽荆?b>同時具有高級語言和匯編語言的特點(diǎn)),單說數(shù)據(jù)處理和編寫系統(tǒng)軟件的本領(lǐng),你還嫩了點(diǎn)。而且不巧犬子的母親同屬“面向?qū)ο蟆奔易濉?/p>
C語言身后的C++聽到這話頓時高傲地?fù)P起了頭。血統(tǒng)純正的王子HTML5(HTML5是用于構(gòu)建因特網(wǎng)的核心技術(shù)的標(biāo)準(zhǔn)語言)也鄙夷地看了JAVA一眼。
正在這劍拔弩張之時,蘋果家的Objective-C卻發(fā)現(xiàn)了一個奇怪的人,自己在傻傻地研究亂七八糟地東西,于是他湊上前問了一句:“敢問兄臺哪門哪派、師從何人?”語畢一個憨厚的臉抬了起來:“不才姓正則名表達(dá)式,你可以叫我小正哈哈。我無門無派,只因?qū)σ恍┢ヅ涞臇|西略有涉獵,才會被拉進(jìn)這武林大會之中?!?/p>
最后這種緊張的氛圍還是被稱作“膠水語言”的和事佬Python給化解了:“哎呀,咱們都很厲害都很厲害,要不然怎么能踏進(jìn)這個屋子呢?既然這樣,不如就一起去尋寶呀!”
雖然大家紛紛同意了,但各派都打著自己的算盤。只有天性純良的小正游離于武林之外,似乎沒有注意武林各派的爭斗,一心研究著自己的東西……
【二】踏上尋寶之路
又說眾人一同踏上尋寶之路。要說他們?yōu)楹瓮庖黄?,皆因他們之前都?dú)自嘗試過無數(shù)次都沒成功……
話說一行人行至“字符山”,該山怪石嶙峋、幾無鳥聲,詭異的氛圍告訴他們:危險來了。
果然,領(lǐng)頭的幾位小將紛紛口吐白沫而亡,眾人見此狀也不敢前行了,于是都停留原地尋求解決辦法。可是這些小兵都是剛剛踏入這座山,既沒有喝此山的水、也沒有采摘過野果之類的吃食,為何突然變成了這樣呢?
各方大佬紛紛迷惑不解,這時一少年卻徑直走入那怪山之中,竟毫發(fā)未損!
正在眾人紛紛驚愕不語時,一個稚嫩的聲音響了起來:“小正哥哥,你好厲害呀!”卻是蘋果家的那小子正滿臉艷羨。
少年這時也緩緩走了回來,略帶羞澀地?fù)狭藫项^說:“其實(shí)也沒什么,不過這座山上的機(jī)關(guān)我略有了解罷了?!?/p>
那咱們來細(xì)細(xì)說一說這正則表達(dá)式到底有什么本領(lǐng)呢?原來他有三絕:“測(測試字符串內(nèi)的模式進(jìn)行數(shù)據(jù)驗(yàn)證)”“換(替換文本)”“提(基于模式匹配從字符串中提取子字符串)”
(例如,您可能需要搜索整個網(wǎng)站,刪除過時的材料,以及替換某些HTML 格式標(biāo)記。在這種情況下,可以使用正則表達(dá)式來確定在每個文件中是否出現(xiàn)該材料或該 HTML 格式標(biāo)記。此過程將受影響的文件列表縮小到包含需要刪除或更改的材料的那些文件。然后可以使用正則表達(dá)式來刪除過時的材料。最后,可以使用正則表達(dá)式來搜索和替換標(biāo)記。)
再說說這時,趾高氣揚(yáng)的Java率先發(fā)問:“你這毛頭小子當(dāng)真能解這難題?”小正謙遜一笑,緩緩道來:“不才略通此術(shù)。過此山每一步都要走對,否則就會吸進(jìn)此山特有的“匹配錯誤”毒氣,然后口吐白沫而亡。雖然各大門派都有絕世武功在身,解鎖一般的機(jī)關(guān)道法(對靜態(tài)文本執(zhí)行簡單搜索和替換任務(wù)、提供與預(yù)期的搜索結(jié)果匹配的確切文本)當(dāng)然不在話下,但此機(jī)關(guān)靈活性極高,若采用一同的方法去闖這個關(guān)(搜索動態(tài)文本),即使不是不可能,至少也會變得很困難?!?/p>
這時和事佬python焦急地詢問:“那請問你能幫我們過去嗎?”
“當(dāng)然可以啦”小正笑瞇瞇地說。
接著,小正教給了每個人一套“防毒氣法”——根據(jù)每個人的體質(zhì)有略微的區(qū)別。也許因?yàn)閜ython特別和氣吧,小正教他教得特別認(rèn)真,甚至將自己畢生所學(xué)傾囊相授(re 模塊使 Python 語言擁有全部的正則表達(dá)式功能)——
P大叔,我教給你的是re氣法里面有好多招數(shù)(函數(shù)),有compile、match、search、findall、finditer、split、sub和subn等。它有兩種運(yùn)法:
1)先將字符串形式編譯為Pattern實(shí)例,然后使用Pattern實(shí)例處理文本并獲得匹配結(jié)果(一個Match實(shí)例),最后使用Match實(shí)例獲得信息,進(jìn)行其他的操作
我一步步和你仔細(xì)說哦:
①re.compile(strPattern[, flag])
這個方法是Pattern類的工廠方法,用于將字符串形式的正則表達(dá)式編譯為Pattern對象。 第二個參數(shù)flag是匹配模式,取值可以使用按位或運(yùn)算符'|'表示同時生效,比如re.I | re.M。
②Match(Match對象是一次匹配的結(jié)果,包含了很多關(guān)于此次匹配的信息,可以使用Match提供的可讀屬性或方法來獲取這些信息)
③Pattern
Pattern對象是一個編譯好的正則表達(dá)式,通過Pattern提供的一系列方法可以對文本進(jìn)行匹配查找。Pattern不能直接實(shí)例化,必須使用re.compile()進(jìn)行構(gòu)造。Pattern提供了幾個可讀屬性用于獲取表達(dá)式的相關(guān)信息:
2)直接用re.match,re.search和re.findall等函數(shù)直接對文本匹配查找
①re.match函數(shù)
只匹配字符串的起始位置,如果不成功的話就返回none
②re.search方法
re.search 掃描整個字符串并返回第一個成功的匹配
【三】寶藏謎底終于揭開
終于,他們歷經(jīng)千難萬險終于找到了寶藏所在地。偌大的石碑上面只刻了單薄的幾行字:
流者,眾水聚也。
一起經(jīng)歷了許多許多的各派高手這時都恍然大悟了,所謂“主流語言”說的不就是我們每一個讓編程更高效的語言嗎?團(tuán)結(jié)合作的精神才是真正的寶藏啊,只有我們每一個語言通力合作,在計(jì)算機(jī)的方方面面各司其職,才能讓計(jì)算機(jī)世界更加和諧、高效和美滿。
然后大家又不禁感嘆:小正才應(yīng)該是我們的榜樣,一路走來默默無聞地幫助著我們,不管是linux、java、python、c、c++、Perl、PHP、Python、JavaScript和JScript等語言都可以使用,在Perl中還內(nèi)建了一個功能強(qiáng)大的正則表達(dá)式引擎。
我們每一個語言都不能成為霸主,小正卻是萬能的工具。
終于,正則表達(dá)式成為了武林盟主,一統(tǒng)計(jì)算機(jī)天下。
哎呀!說了這么多不正經(jīng)的,還是看看大家的洗洗腦吧:
1)正則表達(dá)式30分鐘入門:http://deerchao.net/tutorials/regex/regex.htm
2)Python正則表達(dá)式指南:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
3)Python正則表達(dá)式的七個使用范例:http://blog.jobbole.com/74844/
4)能讓你少寫1000行代碼的20個正則表達(dá)式:http://www.codeceo.com/article/20-regular-expressions.html
5)淺談Python 正則表達(dá)式:https://zhuanlan.zhihu.com/p/26019553
6)正則表達(dá)式-菜鳥教程:http://www.runoob.com/regexp/regexp-tutorial.html
7)Python 正則表達(dá)式:https://mp.weixin.qq.com/s?__biz=MzIwMDU3MDkzNg==&mid=2651305404&idx=1&sn=047e69c48fb328b037a800effcd59c3c&chksm=8d0834ebba7fbdfd512abc61619113aa7c4d439ecbffa78b5314700a32aa7d000ef2c65b34c5&mpshare=1&scene=23&srcid=0127dE2vi9VzVsAxSbchVLZB#rd
8)正則表達(dá)式(轉(zhuǎn)自維基百科):http://www.360doc.com/content/10/1105/18/928711_66914604.shtml
9)正則表達(dá)式(轉(zhuǎn)自搜狗百科):http://baike.sogou.com/v107588.htm?ch=ww.xqy.xgbk