Python:正則表達式-1

原文來自FishC(很是不錯的網站,沒有廣告,成爲會員是很不錯的選擇),這是我的筆記。

正則表達式在Python中的模塊名爲re。個人認爲就像一個超強的通配符--字符串集合,方筆我們查找,搜索文本。這些字符串集合可能包含英語句子,e-mail地址,Text命令,或其它東東。

正則表達式語言相對較小,並受到限制,也就是說並不是所有可能的字符串任務都方便使用正則表達式來完成的。

簡單模式

簡單模式的應用就是字符匹配,當然,1)它可以匹配自身(區分大小寫模式),如FishC將完全匹配FishC,或FISHC,fishc。

2)少數字符我們稱之爲元字符(meta-character)是不能匹配自身的,如. ^ $ * + ? { } [ ] \ | ( ),這些可以理解爲特殊字符。但元字符在方括號中不會觸發特殊功能,在字符類中,他們只匹配自身,如【akm$】會匹配任何字符‘a’,‘k’,‘m’,‘$’, $是一個元字符,但在方括號中不表示特殊含義,它只匹配$字符本身。

3)可以匹配括號中爲列出的所有其他字符,做法是在類的開頭添加一個脫字符^,如【^5】會匹配除了5之外的任何字符。

4)最重要的元字符反斜槓\。入過在反斜槓後邊緊跟一個元字符,那麼元字符的特殊功能也不會觸發,如匹配【,\,可以在他們前面加一個反斜槓,以消除它們的特殊功能:\[, \\。

5)反斜槓後邊跟元字符去除特殊功能,跟普通字符實現特殊功能:\w匹配任何單詞字符。如果正則表達式以字節的形式表示,這相當於字符類【a-zA-Z0-9】;如果正則表達式是一個字符串,會匹配Unicode數據庫中標記爲字母的字符。

    \d            匹配任何十進制數字;相當於【0-9】

    \D            與上面相反,匹配任何非十進制數字的字符;相當於【^0-9】

    \s            匹配任何空白字符;相當於【\t\n\r\f\v】

    \S            匹配任何非空白字符;相當於【^\t\n\r\f\v】

    \w            匹配任何單詞字符

    \W            與上相反

    \b            匹配單詞的開始或結束

    \B            與上相反

它們可以包含在一個字符類中,並且一樣擁有特殊含義。【\s,.】是一個字符類,它將匹配任何空白字符,','或·'.'。

6)元字符‘.’:匹配除了換行符外任何字符。如果設置了re.DOTALL表示,.將匹配包括換行符在內的任何字符。

7)正則表達式除了匹配不同的字符集之外,還可以指定RE部分被重複的次數。

8)元字符*用於指定前一個字符匹配的次數(0次或多次),如ca*t將匹配ct(0個字符a),cat(1個字符a),caaat(3個字符a)。

9)正則表達式默認的重複規則是貪婪的,當重複匹配一個RE時,匹配引擎會嘗試儘可能多的去匹配,直到不匹配或到了結尾,匹配引擎就會回退一個字符,然後在繼續嘗試匹配(這個邏輯有點複雜啊)。

10)另一個實現重複的元字符是+,用於指定前一個字符匹配一次或者多次

11)元字符?用於指定前一個字符匹配零次或一次。可以認爲,它的作用就是把某種東西標誌爲可選的。

12)最靈活的元字符{m,n},它的含義是前一個字符必須匹配m次到n次之間,如a/{1,3}b,會匹配a/b,a//b,a///b;但不會匹配ab(沒有斜槓),也不會匹配a////b(斜槓超過三個)。

13)上面的簡寫方式:{,n}相當於{0,n};{m,}相當於{m,+無窮};{n}則是重複前一個字符n次;{m,  n}有問題,正則表達式裏面不能隨意添加空格的,不然會改變原來的含義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章