初識 Python 正規表示式

正規表示式是一個特殊的字元序列,用來判斷一個字串是否與我們所設定的字元序列是否匹配,也就是說檢查一個字串是否與某種模式匹配。

Python 自 1.5 版本起增加了re 模組,它提供 Perl 風格的正規表示式模式。 re 模組讓 Python 語言擁有全部的正規表示式功能。

下面透過實例,一步一步來初步認識正規表示式。

例如在一段字串中尋找是否含有某個字符或某些字符,通常我們使用內建函數來實現,如下:

# 设定一个常量
a = '两点水|twowater|liangdianshui|草根程序员|ReadingWithU'
# 判断是否有 “两点水” 这个字符串,使用 PY 自带函数
print('是否含有“两点水”这个字符串:{0}'.format(a.index('两点水') > -1))
print('是否含有“两点水”这个字符串:{0}'.format('两点水' in a))

輸出的結果如下:

是否含有“两点水”这个字符串:True
是否含有“两点水”这个字符串:True

那麼,如果使用正規表示式呢?

剛剛提到過,Python 給我們提供了re 模組來實現正則表達式的所有功能,那麼我們先使用其中的一個函數:

re.findall(pattern, string[, flags])

該函數實現了在字串中找到正規表示式所匹配的所有子字串,並組成一個列表返回,具體操作如下:

import re
# 设定一个常量
a = '两点水|twowater|liangdianshui|草根程序员|ReadingWithU'
# 正则表达式
findall = re.findall('两点水', a)
print(findall)
if len(findall) > 0:
    print('a 含有“两点水”这个字符串')
else:
    print('a 不含有“两点水”这个字符串')

輸出的結果:

['两点水']
a 含有“两点水”这个字符串

從輸出結果可以看到,可以實現和內建函數一樣的功能,可是在這裡也要強調一點,上面這個例子只是方便我們理解正規表示式,這個正規表示式的寫法是毫無意義的。為什麼要這樣說呢?

因為用 Python 自帶函數就能解決的問題,我們就沒必要使用正規表示式了,而且這樣做多此一舉。而且上面例子中的正規表示式設定成為了一個常數,並不是一個正規表示式的規則,而正規表示式的靈魂在於規則,所以這樣做意義不大。

那麼正規表示式的規則怎麼寫呢?先不急,我們一步一步來,先來一個簡單的,找出字串中的所有小寫字母。首先我們在 findall 函數中第一個參數寫正規表示式的規則,其中 [a-z] 就是要符合任何小寫字母,第二個參數只要填入要符合的字串就行了。具體如下:

import re
# 设定一个常量
a = '两点水|twowater|liangdianshui|草根程序员|ReadingWithU'
# 选择 a 里面的所有小写英文字母
re_findall = re.findall('[a-z]', a)
print(re_findall)

輸出的結果:

['t', 'w', 'o', 'w', 'a', 't', 'e', 'r', 'l', 'i', 'a', 'n', 'g', 'd', 'i', 'a', 'n', 's', 'h', 'u', 'i', 'e', 'a', 'd', 'i', 'n', 'g', 'i', 't', 'h']

這樣我們就拿到了字串中的所有小寫字母了。

繼續學習