一般認為正則表示式是比較難寫的,我也這麼認為,不過在工作上用的其實不多,正則表示式在基於文字的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’)]’
每個元組中的內容可以透過索引的方式取出。
分組確實是一種萬能的寫法,用的多了就有體會了。