清晰透明的Python語言說明
Python語言是一種清晰的語言的另一個意思是,它的作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。
前面說過“.”通常用作元字符,但在字符集合里,其特殊性將被剝奪,恢復成普通字符。這一點讀者可以自己改動一下上面的代碼來實驗一下。有時需要查找不屬于某個字符集合的字符。比如想查找除了數字6以外,其它任意字符都行的情況,這時需要用到反義。
其做法是把元字符“^”作為集合的首個字符,例如,[^5] 將匹配除“6”之外的任意字符。反斜杠“\”是一種非常重要的元字符。我們知道在Python的字符串中,反斜杠也是作為一種特殊字符(或轉義字符)使用,后面可以跟不同的字符以表示不同特殊意義;
它也可以用于取消所有的元字符,這樣你就可以在模式中匹配它們了。舉個例子,如果你需要匹配字符“\”,你可以在其之前用反斜杠來取消它們的特殊意義:\\。下面是一些用“\”跟其他字符復合而成的元字符,它們通常表示一些預定義的字符集,如下所示:
我們已經講過為單個字符指定重復次數的方法——直接在字符后面加上限定符就行了;現在我們再來學習一下重復多個字符的八法:你可以用小括號來指定子表達式(也叫做分組)。
然后你就可以指定這個子表達式的重復次數了,你也可以對子表達式進行其它一些操作。我們知道,IP地址是由點號分隔的四個數字,并且每個數字都不能大于255。(\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。
其中:\d{1,3}匹配1到3位的數字,(\d{1,3}\.){3}匹配三位數字加上一個英文句號(這個整體也就是這個分組)重復3次,最后再加上一個一到三位的數字(\d{1,3})。然而,它也將匹配256.300.888.999這種不可能存在的IP地址。如果能使用算術比較的話,或許能簡單地解決這個問題,但是正則表達式中并不提供關于數學的任何功能。
所以只能使用冗長的分組、選擇和字符集合來描述一個正確的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。理解這個表達式的關鍵是理解2[0-4]\d|25[0-5]|[01]?\d\d?,經過上面的介紹,相信讀者能分析得出來它的意義。
【編輯推薦】