特殊符號和字符
本節我們將介紹最常見的特殊符號和字符,即所謂的元字符,正是它給予正則表達式強大的功能和靈活性。下面我們將列出一些最常見的符號和字符:
我們這邊只列舉了部分的符號和字符,大家可以自行搜索查看全部的內容。
使用擇一匹配符號匹配多個正則表達式模式
表示擇一匹配的管道符號(|),也就是鍵盤上的豎線,表示一個「從多個模式中選擇其一」的操作。它用於分割不同的正則表達式。例如,在下面的表中,左邊是一些運用擇一匹配的模式,右邊是左邊相應的模式所能夠匹配的字符。
有了這個符號,就能夠增強正則表達式的靈活性,使得正則表達式能夠匹配多個字符串,而不僅僅只是一個字符。擇一匹配有時候也被稱為並(union)或者邏輯或操作(logical OR)。
匹配任意單個字符
點號或者句點(.)符號匹配除了換行符\n以外的任何字符(Python正則表達式有一個編譯標誌[S或者DOTALL],該標記能夠推翻這個限制,使點號能夠匹配換行符)。無論字母、數字、空格(並不包括"\n"換行符)、可列印字符、不可列印字符,還是一個符號,使用點號都可以匹配它們。那麼我們這裡需要思考一個問題,如何匹配句點或者句號字符呢?其實要匹配句點符號本身,我們就必須使用反斜線轉義句點符號的功能,例如:"\."。
從字符串起始或者結尾或者單詞邊界匹配
還有些符號和相關的特殊字符用於在字符串的起始和結尾部分指定用於搜索的模式。如果是要匹配字符串的開始位置,就必須使用脫字符(^)或者特殊字符\A(反斜線和大寫字母A)。後者主要用於那些沒有脫字符的國際鍵盤。同樣美元符號($)或者\Z將用於匹配字符串的末尾位置。
使用這些符號的模式與賁張描述的其他大多數模式是不同的,因為這些模式制定了位置或者方位。
特殊字符\b和\B可以用來匹配字符邊界。而兩者的區別在於\b將用於匹配一個單詞的邊界,這意味著如果一個模式必須位於單詞的起始部分,就不管該單詞前面是否有任何字符(單詞位於行首)。同樣,\B將匹配出現在一個單詞中間的模式(即,不是單詞邊界),下面我們來看一些示例:
創建字符集
儘管句點可以用於匹配任意符號,但某些時候,可能想要匹配某些特定字符。正因如此,發明了方括號。該正則表達式能夠匹配一對方括號中任意字符。下面為一些示例:
關於[cr][23][dp][o2]這個正則表達式有一點需要說明;如果僅允許「r2d2」或"c3po"作為有效字符串,就需要更嚴格限定的正則表達式。因為方括號僅僅表示邏輯或的功能,所以使用方括號並不能實現這一限定要求。唯一的方案就是使用擇一匹配,大家可以思考一下怎麼做。
然而,對於單個字符的正則表達式,使用擇一匹配和字符集是等效的。例如,我們以正則表達式"ab"作為開始,該正則表達式只匹配包含字母"a"且後面跟著字母"b"的字符串,如果我們想要匹配一個字母的字符串,例如,要麼匹配a,要麼匹配b,就可以使用正則表達式[ab],因為此時字母a和b是相互獨立的字符串。我們也可以使用正則表達式a|b。然而,如果我們想要匹配滿足模式"ab"後面且跟著"cd"的字符串,我們就不能使用方括號,因為字符集的方法只適用於單字符的情況。這種清康熙愛,唯一的方法就是使用ab|cd,這就與我們上面的問題是相同的。所以上面問題的答案就是使用正則表達式r2d2|c3po即可。