正則表達式(Regular Expressions, 簡稱 regex)是一種用來處理文字的強大工具。它可以幫我們輕鬆找出符合特定模式的字串,這在 AI 的資料處理、自然語言處理(NLP)等領域非常有用。
以日常生活中常見的應用來說,我們可以使用正則表達式來過濾或提取有用的資訊,比如電子郵件、電話號碼、日期格式等。
.
: 任意一個字元(除了換行符號)\d
: 任意一個數字(0-9)\w
: 任意一個字母、數字或底線+
: 重複出現 1 次以上*
: 重複出現 0 次以上?
: 出現 0 次或 1 次[]
: 字元集合,匹配其中任意一個字元^
: 字串開頭$
: 字串結尾|
: 「或」的意思,表示兩種選擇之一()
: 群組,通常用來標示我們想要擷取的部分在 AI 領域中,常常需要處理大量的文本資料。透過正則表達式,我們可以更快速地整理、提取資訊。例如:
利用正則表達式來找出輸入中的電子郵件地址,這樣的寫法很適合用在分析社交媒體數據或自動分類郵件中。
find_email 是一個函數,用來從輸入的 text 字串中提取出所有符合條件的電子郵件地址。
r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
是我們用來找電子郵件的正則表達式:
\b
是單詞邊界,確保我們只匹配整個電子郵件,不是字串的一部分。[A-Za-z0-9._%+-]+
匹配電子郵件的用戶名部分,允許字母、數字、點、底線等字符。@
是電子郵件中的分隔符。[A-Za-z0-9.-]+
匹配郵件的域名部分。\.[A-Z|a-z]{2,}
匹配結尾的「.com」、「.org」等後綴,後面至少有兩個字母。
re.findall():這個方法會返回所有符合條件的電子郵件地址。
測試中輸入了一個包含兩個電子郵件地址的範例字串,並通過 find_email() 函數找出其中的電子郵件,最後將結果輸出。
接著來試試看提取文本中的日期,這在日誌分析、文件處理等任務中很有用。
\b\d{4}[-/]\d{2}[-/]\d{2}\b|\b\d{2}[-/]\d{2}[-/]\d{4}\b'
來匹配不同的日期格式:
\d{4}
:表示 4 位數字(年份)[-/]
:表示日期中的分隔符,允許-
或/
\d{2}
:表示月份和日期- 用
|
:來處理兩種常見的日期格式(例如 YYYY-MM-DD 或 DD/MM/YYYY)
社交媒體的平台上,有時會出現不當的留言。這時可以透過 Python 的正則表達式,自動過濾掉這些不雅字眼,來維持乾淨的留言區。
建立一個簡單的留言過濾器,當用戶輸入留言時,若有不雅字眼,系統會自動將它們替換成「***」。以下是題目的要求:
定義不雅字清單:首先我們建立一個不雅字的清單 bad_words = ['stupid', 'idiot', 'dumb']
,這些字詞會被過濾器偵測到並替換。
建立正則表達式:
使用 r'|'.join(bad_words)
將這些字詞轉換成一個正則表達式字串,|
是「或」的意思,可以同時檢測多個不雅字。
正則表達式替換:re.sub()
函數用來匹配並替換不雅字,這裡使用了 flags=re.IGNORECASE
來忽略大小寫,確保同個詞(如「Stupid」和「stupid」)都能被偵測。
提醒留言已過濾:
如果 filtered_message 和原始 message 不相同,代表系統已經過濾了不雅字眼,並給出提示。
檢查替換結果:
一開始覺得正則表達式中那些符號有點複雜,像是 \d, \w, 還有 +、* 之類的符號,感覺有點難懂。但當我開始用它來解決問題時,突然發現這些符號其實比很多行的程式碼還要簡潔許多(但感覺可讀性沒有很高QQ),能很快匹配到我們想要的資料。無論是找出某種格式的文字,還是從大段文本中挑出特定的東西,正則表達式都很方便。
而這次小專題的主題也是我們生活中很常見的情境,所以我不僅學到了如何使用正則表達式來過濾敏感內容,未來還能實際應用在網站或社交平台的留言過濾系統中。
以後如果遇到資料過濾、清理,甚至 AI 訓練的前期處理,我想正則表達式都會是必不可少的工具><