正則表示式的萬能寫法?

一般認為正則表示式是比較難寫的,我也這麼認為,不過在工作上用的其實不多,正則表示式在基於文字的linux上用處是非常大的,而在基於物件的Python上其實沒有什麼用途,所以我們沒有必要太深入的去學習正則表示式,學一個萬能公式夠用就行。

我這裡所用的萬能公式其實就是分組,舉個例子,像這樣的一段html程式碼,

如何去匹配標籤裡面的內容那?最簡單的一個辦法是字串切片

正則表示式的萬能寫法?

但是字串切片相當於把程式碼寫死了,對這個字串可以這樣切,對其他的字串可能就不行了,所以有時候需要用正則找一些通用的公式,我們這裡可以從‘<>’上找思路,比如可以這樣寫

正則表示式的萬能寫法?

這個寫法就是分組,稍微給大家講解一些程式碼

import re

str=‘

res=re。findall(‘\>(。*?)\<’,str)

print(res)

‘import re’是匯入正則模組的意思,‘re。findall’是呼叫re模組的findall方法,‘\>(。*?)\<’是我們所寫的正則表示式,‘str’是原始字串,res是返回的結果。

正則表示式中‘()’代表分組,一旦出現括號先優先匹配括號內的內容,也就說結果中只包含括號內的內容,這有什麼好處那?好處就是我們在書寫正則時不必再考慮什麼開頭,什麼結尾,只需考慮要匹配的內容就行,這就是我所說的萬能公式。

再舉一個例子,現在我們需要匹配幾個網址的域名,

‘ww。baidu。com,site。sougou。com,ftp。pku。com’

正則表示式的萬能寫法?

正則表示式為‘\。(。*?)\。’,得到的結果為‘[‘baidu’, ‘sougou’, ‘pku’]’,可以看出,無論前面跟的是什麼協議,正則都將域名匹配了出來。

當然這裡面還有一些小知識點,比如反斜槓‘\’代表跳脫字元,‘。*?’代表非貪婪匹配,這個在其他的正則講解中都會有,我今天強調的一點就是分組。

一個正則表示式中可以有多個分組,比如下面這樣

‘(。*?)\。(。*?)\。(\w+),?’

\w的意思是匹配字母數字下劃線,這種情況就可以得到一個由元組組成的列表

正則表示式的萬能寫法?

結果為

‘[(‘www’, ‘baidu’, ‘com’), (‘site’, ‘sougou’, ‘com’), (‘ftp’, ‘pku’, ‘com’)]’

每個元組中的內容可以透過索引的方式取出。

分組確實是一種萬能的寫法,用的多了就有體會了。