如果說什麼是我學習程式設計來最好用,最常用的知識點,那應該就是正規表示式了。嚴謹的說,正規表示式並不是一門程式語言,也不是為了一種程式語言而服務的知識。但他確實足夠好用,應用也足夠廣泛。
例如可以在文字中提取規則的**號碼,電子郵箱。在office中的萬用字元也是正規表示式哦,這樣在office中做規則的搜尋和替換,也是能極高的提公升工作效率。
正規表示式在爬蟲中也經常使用到,例如只需要簡單的幾行**,就可以獲取h1標籤下的所有內容。
html = '''
'''content = re.findall('', html)
print(content)
#result [' test1 ', ' test2 ', ' test3 ']
那正規表示式到底是什麼,又該如何使用,為什麼我們爬蟲中老是使用(.*?),它到底起到了什麼作用,這篇文章就詳細告訴你。
正規表示式(regular expression)描述了一種字串匹配的模式(pattern),聽起來確實不是很好理解。
所以用大白話來說,正規表示式就是一些人為定義的規則,進行組合,使其具有快速匹配字串的功能。
前面說到正規表示式就是一些定義好的規則的組合,這個規則背後就是元字元。
元字元有很多,我們按用途將他們分為5類,便於理解和使用。
在集合中使用-,可以匹配乙個範圍內的字元,例如[a-z]可以匹配a到z任意乙個字元。
使用 ^ 可以匹配補集,例如[^p]ython,就能匹配除了p之外的字元。
(2)次數字元 上面的正規表示式只能匹配乙個字元,這時你就需要次數相關的字元。
例如,匹配11個字元的**號碼。
這個使用方法很簡單,大家多練習使用即可。但這裡有乙個很重要的知識點需要和大家講解下。那就是貪婪模式和非貪婪模式。
以*為例,它可以匹配0個或多個字元,那到底是匹配多少個字元了?貪婪模式就是保證匹配成功的情況下,盡可能多的匹配,非貪婪模式則反之。預設情況下是貪婪模式,如果需要切換為非貪婪模式,就需要在*後面加上?號。
以為例,如果我們使用<.>,就會匹配到(.是匹配除換行符之外的任何單個字元)。
如果使用<.>,就會匹配到。
(3)並列(|) 並列字元很好理解,當需要匹配兩個字元中的乙個的時候,就用|。a|b,匹配到了a,就不會查詢b。
這裡就是匹配到的就是c或者是python。
(4)提取() 如果需要把匹配的字串提取出來,就需要使用小括號。這主要使用在程式設計中,對資料的提取。正如前面的爬蟲**,用上括號後,就能將h1標籤中的內容提取出來。
html = '''
'''content = re.findall('', html)
print(content)
#result [' test1 ', ' test2 ', ' test3 ']
在 () 中最前面加入 ?:,代表只匹配不獲取(non-capturing)。
html = '''
'''content = re.findall('', html)
print(content)
#result ['', '', '']
其實這裡的?:是是非捕獲元之一,還有兩個非捕獲元是 ?= 和 ?!,前者為正向預查,後者為負向預查。這兩個又衍生出?<=和?a(?=b),匹配符合b條件的a;(?<=b)a,匹配符合b條件的a。前者是匹配的是括號前面的,後者匹配的是後面的。
windows(?=7|xp|2000|10),能匹配windows7,windowsxp,windows2000,windows10前的windows。
a(?!b),匹配不符合b條件的a;(?
(5)特定意義符號 就是說固定的寫法來代表特定的意義,例如\d代表的就是匹配乙個數字字元,等同於[0-9]。
以下就是常用的特定意義符號:
字串含義
^匹配輸入字串的開始位置。
$匹配輸入字串的結束位置。
.匹配除換行符(\n、\r)之外的任何單個字元。
\b匹配乙個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\b匹配非單詞邊界。'er\b' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\d匹配乙個數字字元。等價於 [0-9]。
\d匹配乙個非數字字元。等價於 [^0-9]。
\f匹配乙個換頁符。
\n匹配乙個換行符
\r匹配乙個回車符。
\t匹配乙個製表符。
\v匹配乙個垂直製表符。
\s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\s匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
\w匹配字母、數字、下劃線。等價於'[a-za-z0-9_]'。
\w匹配非字母、數字、下劃線。等價於 '[^a-za-z0-9_]'。
\為轉義字元,例如\*,就可以匹配*本身。
學完前面的元字元後,就算是完成了大部分正規表示式的知識點了,也能獨立使用正規表示式來完成日常工作了。之前的截圖中,可以看到gm,他們其實是修飾符。
修飾符不寫在正規表示式裡,標記位於表示式之外,我們來看下他們代表的意義。
修飾符含義
具體解釋
iignore
匹配時不區分大寫小
gglobal
全域性匹配,查詢所有的匹配項。
mmulti line
多行匹配,使邊界字元 ^ 和 $ 匹配每一行的開頭和結尾。
s特殊字元圓點 . 中包含換行符 \n
預設情況下的圓點 . 是 匹配除換行符 \n 之外的任何字元,加上 s 修飾符之後, . 中包含換行符 \n。
看完這篇文章,Class的相關知識你就都懂了。
一.類和物件 1.通過分析 物件 的屬性和行為設計出乙個類 物件導向 2.類就是資料型別 簡單型別 只能表示乙個屬性 變數 c c 內建資料型別。陣列型別 可以表示多個屬性 變數 型別必須相同。結構型別 可以表示多個屬性 變數 但缺少行為 函式 類型別 既能表示屬性,也能表示行為,一種復合的資料型別...
看完這篇文章你就能完全明白web專案中的路徑問題了
今天做網上購物系統 web專案 中個人資訊模組的頭像上傳,一直出現路徑問題,仔細看一下,是自己完全沒有弄明白路徑。經過一番學習,也算是有所收穫,下面我們就來談一下絕對路徑和相對路徑的區別問題。我們都知道,在我們平時使用計算機時要找到需要的檔案就必須知道檔案的位置,而表示檔案的位置的方式就是路徑,例如...
如果你真心想學SEO,不妨先把這篇文章看完
之前很多新手問筆者,學習seo一般能多久學會,其實這樣問題比較難回答,一般學得好的,只需要乙個月就能掌握seo的技術,而有的人學習一兩年依然停留在發外鏈更新軟文的層面,因此很多新手都學不好這門技術的原因也在這裡,那麼對於新手而言,如何更好的學習seo呢?下面我就來給大家簡單講講如何學習好seo。在你...