iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
AI & Data

讓電腦聽懂人話:30 天 NLP 入門系列 第 5

Day 5|文本清理(下):Regex 應用

  • 分享至 

  • xImage
  •  

引言

在前一天的內容,我們談到了 Regex 是一套怎樣的規則,以及它是如何用來匹配文字。前一天內容傳送門🚪 但是光知道規則還不夠,我們需要工具來操作這些規則,以便達成我們想做的事!

這時候,Python 的 re 套件就要出場啦~

今天我們要認識三個簡單的功能,讓我們可以做到「搜尋」&「替換」資訊這兩件事:

1. search()
2. findall()
3. sub()

re.search():搜尋第一個符合的結果

語法:re.search(pattern, string)

這個功能是可以找到「第一個」符合模式的內容,並回傳結果。如果沒有匹配到任何東西則會回傳 None。

註:在 pattern 前面加上 r 表示接下來的字串是使用 Regex

text = "I love learning NLP and I love regex."
match = re.search(r"love", text)

print(match)   # <re.Match object; span=(2, 6), match='love'>
print(match.group())   # love

re.findall:提取所有符合的文字

語法:re.findall(pattern, string)

這個功能可以抓出「所有」符合模式的文字,並回傳列表。

text = "會議日期:2025/09/15,下次會議:2025/10/15"
dates = re.findall(r"\d{4}/\d{2}/\d{2}", text)

print(dates) # ['2025/09/15', '2025/10/15']

re.sub:批量替換文字

語法:re.sub(pattern, replacement, string)

這個功能會先將符合模式的文字找出來,然後再用替換的文字取代掉。

text = "I like cats. Cats are cute."
result = re.sub(r"cats", "dogs", text, flags=re.IGNORECASE) # flags=re.IGNORECASE 意思是忽略大小寫

print(result)  # I like dogs. dogs are cute.

Bonus

日期有很多種不同表示法,有的國家習慣用年/月/日,有的習慣用日/月/年,有的會用斜線/分隔,有的用點.
現在有一個日期是 2025/09/15,我們想要變成 15/09/2025,這樣的轉換要怎麼做呢?

  1. 先想想要怎麼捕捉舊的日期的格式
old_date = "2025/09/15"

# regex => \d{4}/\d{2}/\d{2}
  1. 可以用()把內容 group 起來
# 年、月、日 分別是三組資訊
(\d{4})/(\d{2})/(\d{2})
  1. 使用re.sub()做替換,群組 (group) 可以用 1, 2, 3 代表

註:r"\1"代表第一個群組括號的內容(\d{4})

old_date = "2025/09/15"
new_date = re.sub(r"(\d{4})/(\d{2})/(\d{2})", r"\3/\2/\1", old_date)

print(new_date)  # 15/09/2025

結語

Regex 還有其他的功能可以去探索,但現在學會以上這幾個就已經可以實際去用在基本的 NLP 文本清理上啦!

最後提供幾個小練習題,有興趣的話可以試著做做看,明天的文章會公布答案哦~

text = "小明的手機號碼是: 0912-345-678,市話號碼是:02-777-0909,email是: xiaoming123@gmail.com。"
  1. re.findall() 找出所有的號碼(提示:用\d{}
  2. re.search() 找出第一個 email
  3. re.sub() 把手機號碼改成 +886-9XX-XXX-XXX(提示:用括號分組再替換)

上一篇
Day 4|文本清理(上):Regex 介紹
系列文
讓電腦聽懂人話:30 天 NLP 入門5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言