在前一天的內容,我們談到了 Regex 是一套怎樣的規則,以及它是如何用來匹配文字。前一天內容傳送門🚪 但是光知道規則還不夠,我們需要工具來操作這些規則,以便達成我們想做的事!
這時候,Python 的 re
套件就要出場啦~
今天我們要認識三個簡單的功能,讓我們可以做到「搜尋」&「替換」資訊這兩件事:
1. search()
2. findall()
3. sub()
語法: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(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(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.
日期有很多種不同表示法,有的國家習慣用年/月/日
,有的習慣用日/月/年
,有的會用斜線/
分隔,有的用點.
現在有一個日期是 2025/09/15
,我們想要變成 15/09/2025
,這樣的轉換要怎麼做呢?
old_date = "2025/09/15"
# regex => \d{4}/\d{2}/\d{2}
()
把內容 group 起來# 年、月、日 分別是三組資訊
(\d{4})/(\d{2})/(\d{2})
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。"
re.findall()
找出所有的號碼(提示:用\d{}
)re.search()
找出第一個 emailre.sub()
把手機號碼改成 +886-9XX-XXX-XXX(提示:用括號分組再替換)