pandas筆記(三)-- 查詢有效郵箱的使用者(正規表示式應用)

KevinScott0582發表於2024-03-08

題目描述

一個有效的電子郵件具有字首名稱和域,其中:

  1. 字首 名稱是一個字串,可以包含字母(大寫或小寫), 數字, '_', '.', 和破折號'—', 字首名必須以字母開頭
  2. 域名'@leetcode.com'

編寫一個解決方案,以查詢具有有效電子郵件的使用者, 以任何順序返回結果表。

測試用例

輸入

user_id name mail
1 Winston winston@leetcode.com
2 Jonathan jonathanisgreat
3 Annabelle bella-@leetcode.com
4 Sally sally.come@leetcode.com
5 Marwan quarz#2020@leetcode.com
6 David david69@gmail.com
7 Shapiro .shapo@leetcode.com

輸出

user_id name mail
1 Winston winston@leetcode.com
3 Annabelle bella-@leetcode.com
4 Sally sally.come@leetcode.com

解析

本題的核心在於確定有效表示式的匹配規則, 並寫出相應的正規表示式。值得一提的是,在pandas庫中自帶match()方法支援正規表示式匹配, 無需import re

正規表示式由三部分組成,即字首、主題和域名

  • 字首以字母開頭, 即 ^[a-zA-Z]
  • 主體可以包含字母, 數字, '_', '.', '—', 即[a-zA-Z0-9_.—]
  • 域名為leetcode@\.com$, \.需要使用反斜槓轉義, 在python3.7及以上版本中@無需轉義

程式碼如下:

import pandas as pd

def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
    mails = users[users["mail"].str.match(r"^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\.com$")]
    return mails

在表示式前應加r表示只讀,防止某些字元被轉義
此外,Dataframe中的字元型資料以varchar儲存,處理時應先轉換為str例項

相關文章