開篇,還是從一道面試題開始談起:
面試題:抓取招聘資訊。
如下圖:
這是從智聯招聘**上擷取的乙份招聘資訊頁面,
要求用正規表示式抓取出當前頁面下的所有職位名稱。
想必,接觸過正規表示式的程式設計師做出這道題來都不算困難。只要根據頁面的一些規律性的**就可以寫出相應的正規表示式。
下面附上html**頁面(部分截圖):(圖2)
解題思路:
要想從頁面中匹配出相應的正規表示式,就要找出一定的規律來,如下圖:
可見,職位資訊都是包含在乙個超連結中,雖然超連結位址不同但他們的class="joblink"屬性都是相同的,這樣,規律就出來了,只要我把其中的 class="joblink"匹配上,再從中提取組,那麼這個職位資訊也就提取出來了。
我的提取職位資訊的正規表示式如下:
(.+?)
測試如下圖:
做到這裡,又突然勾起了我的興趣。既然職位資訊這麼好抓取,那我何不把公司資訊及其他的資訊都給抓取下了呢?或者說,何不把職位資訊和公司資訊一一對應的給他抓取下來?畢竟是剛開始學正規表示式,就當練習了,多多練習才能總結出經驗和規律來嘛!
再次觀察html**:
可見,對應於職位資訊的class="companylink"這個屬性都是一致的。根據這一點,正規表示式也就好寫了:
(.+?)
測試如下圖:
接下來就是怎麼將這兩個正規表示式給合併了:
再次觀察圖2,再這兩個之間只是隔了一些**標籤,所以開始我想到的方法就是用 .+? 來進行匹配即可。但是無論我怎麼測試,都出不來想要的效果。
以下是我測試時失敗的正規表示式:
1. (.+?)(.+?)(.+?)
2. (.+?)
(.+?)(.+?)
3. (.+?)
(.+?)
第三種方法我乾脆直接都把這些標籤給寫上了,但仍出不來想要實現的效果。
最後只得向敬愛的曉虎哥求助了。
曉虎哥說:在標籤和標籤之間的這些空白符(如圖2)也算是字串,必須把他們也要匹配出來。
虎哥的一句話讓我頓悟啊,之前我一直覺得這些只是空白嗎,根本不顯示的,又不像換行符雖不顯示出來但檢視原始碼還有個
標籤呢,但是空白符也是佔著一定的位置的。
所以,修改後的正規表示式為:
下圖是我自己寫的程式的抓取結果截圖:
總結一下吧:
有些細微的地方很容易被忽略掉,但關鍵時刻也是這些最容易被忽視的地方決定著整件事情是成功還是失敗。
畢竟細節決定成敗嘛!
空白符,我記住你了。
後天曉虎哥就要去往別的城市工作了,這段時間裡非常感謝他教會我的解題方法和技巧,在這裡祝他一路順風吧!
初學正規表示式,希望可以幫到一些朋友們!
初學正規表示式之不可忽視的空白符
前幾天的博文 關於一道.net程式設計師面試題的遐想 得到了很多高手的指教,使我學到了很多,在這裡再次向園子裡的高手們表示感謝。開篇,還是從一道面試題開始談起 面試題 抓取招聘資訊。如下圖 這是從智聯招聘 上擷取的乙份招聘資訊頁面,要求用正規表示式抓取出當前頁面下的所有職位名稱。想必,接觸過正規表示...
正規表示式初學
今天第一次真正好好學了下這個正規表示式,還是看的鳥哥私房菜,感覺收穫很大啊,閒話不多說了。下面是re字元的使用 word 待搜尋的字元word在字串首行 範例 搜尋首行為 開始的那一行,並列出行號 grep n a.txt word 待 搜尋的字元word在字串行尾 範例 將行尾為!的那一行列印出來...
初學正規表示式
初識正則 剛聽到正規表示式,很懵,正規表示式,數學公式?那和python有什麼關係。總之,一聽名字就知道不簡單。1.正規表示式 又稱規則表示式,所謂正規表示式,就是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組合乙個 規則字串 這個 規則字串 用來表達對字串的一種...