python--正則表達式學習彙總

(感謝原作者的辛勤勞作~)本文正文大部分轉載自http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

1. 正則表達式基礎

1.1.概念介紹

正則表達式是用於處理字符串的強大工具,它並不是Python的一部分。
其他編程語言中也有正則表達式的概念,區別只在於不同的編程語言實現支持的語法數量不同。
它擁有自己獨特的語法以及一個獨立的處理引擎,在提供了正則表達式的語言裏,正則表達式的語法都是一樣的。
下圖展示了使用正則表達式進行匹配的流程:
這裏寫圖片描述
正則表達式的大致匹配過程是:

1.依次拿出表達式和文本中的字符比較,
2.如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
3.如果表達式中有量詞或邊界,這個過程會稍微有一些不同。

這裏寫圖片描述

1.2. 數量詞的貪婪模式與非貪婪模式

正則表達式通常用於在文本中查找匹配的字符串。
Python裏數量詞默認是貪婪的(在少數語言裏也可能是默認非貪婪),總是嘗試匹配儘可能多的字符;非貪婪的則相反,總是嘗試匹配儘可能少的字符。
例如:正則表達式”ab*”如果用於查找”abbbc”,將找到”abbb”。而如果使用非貪婪的數量詞”ab*?”,將找到”a”。

1.3. 反斜槓的困擾

與大多數編程語言相同,正則表達式裏使用”\”作爲轉義字符,這就可能造成反斜槓困擾。
假如你需要匹配文本中的字符”\”,那麼使用編程語言表示的正則表達式裏將需要4個反斜槓”\\”:前兩個和後兩個分別用於在編程語言裏轉義成反斜槓,轉換成兩個反斜槓後再在正則表達式裏轉義成一個反斜槓。
Python裏的原生字符串很好地解決了這個問題,這個例子中的正則表達式可以使用r”\”表示。同樣,匹配一個數字的”\d”可以寫成r”\d”。有了原生字符串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表達式也更直觀。

1.4. 匹配模式

正則表達式提供了一些可用的匹配模式,比如忽略大小寫、多行匹配等,這部分內容將在Pattern類的工廠方法re.compile(pattern[, flags])中一起介紹。

2. re模塊

2.1. 開始使用re

Python通過re模塊提供對正則表達式的支持。使用re的一般步驟是先將正則表達式的字符串形式編譯爲Pattern實例,然後使用Pattern實例處理文本並獲得匹配結果(一個Match實例),最後使用Match實例獲得信息,進行其他的操作。

以下是用re模塊做的幾個模式匹配例子:

def do_re(pattern, str, method):
    m = None
    if method == "match":
        print "method is match."
        m = re.match(pattern, str)
    elif method == "search":
        print "method is search."
        m = re.search(pattern, str)

    if m is not None:
        return m.group()
    return None

if __name__ == "__main__":
    # 模式匹配"bat"、"bit"、"but"、"hat"、"hit"、"hut"、
    pattern_1 = "([bh][aiu]t)"
    # 模式匹配一個空格分隔的任意一對單詞,比如名和姓
    pattern_2 = "[A-Za-z]+\s[A-Za-z]+"
    # 匹配所有合法的python標識符
    pattern_4 = "^[_A-Za-z][_\w]+"
    # 模式匹配以www開頭,常見域名結尾的web域名
    pattern_6 = "^[w]{3}\.\w\.(com|edu|net|cn|gov)$"

    print do_re(pattern_6, "www.user1234561.cn", "match")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章