Regular Expression 是一個很好用來做文字操作的一個工具。它主要就是透過使用者輸入的字元中找出一篇文章裡相對應的 pattern。聽起來很抽象吧,文字是會有怎樣的 pattern 咧?我們就不浪費時間直接進入主題吧~

RegEx Patterns

我們會將 RegEx 的 pattern 寫在一個方括號([])裡,並且如果要限制字數的話,我們會寫在大掛號({})裡。以下為懶人包,不用謝~

Syntax Meaning Example
[A-Z0-9] Pattern 所有大寫英文字母和數字
{1-3},{:5} 字元數 1 至 3 個字元, 0 至 5 個字元
[^wW] 以外/沒有??? 不是 w, W 的字元
a|b 或、pipe、or a 或 b
colou?r 前一個字元可選 color, colour
he*y! 0 或以上前一個字元 hey!, heey!, heeey!...
o+h! 1 或以上前一個字元 oh!, ooh!, oooh!...
gra.e 任意一個字元 grace, grape, gra3e
\ 跳出特殊符號 (\$ \^)
^[A-Z] matches beginning of line Big Bird
.$ matches end of line The end., The end?, The end!

RegEx in Python

若是要在 Python 裡面對一個文集做 RegEx 的操作話,我們首先要套用 Python 的內建模組 re。那我們來對一個 corpus 做一些處理吧~

這裡先跟大家介紹幾個 IR 會比較常用到的 function。re.findall() 會將所有符合 pattern 的字串 append 到一個 list 裡;如果只是要確認這個 pattern 的字有沒有存在,可以用 re.search() 來回傳一個布林值。re.split() 基本上跟 split() 是一樣的功能,它會依據所輸入的 pattern 把字串split 到一個 list 裡面。最後,如果我們要直接對我們的 corpus 做字元的 substitution,我們可以用 sub() 來對符合 pattern 的字元做處理。

import re
import string
corpus = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
punc = string.punctuation
# 找出所有 5 個字元以上的全小寫字
find = re.findall('[a-z]{5,}',corpus)
# 將所有標點符號當作 split 的點
words = re.split('['+punc+' ]', corpus)
words = sorted(filter(None,sp))
# 將大寫改成小寫
subs = re.sub('[A-Z]',
            lambda x: x.group(0).lower(),
            corpus)
print(find)
print(words)
print(subs)

當然,還有很多時候我們會拿 RegEx 來判別一些像是身份證、email、電話號碼之類的東西... 基本上如果記不起來的話,可以建議大家寫在一個文件裡面,需要的時候再查就好了... 或者可以來這裡玩玩看~

Leave a Reply

Your email address will not be published. Required fields are marked *