Skip to content

建立 2026-09-15 更新 2026-09-15

錨點與邊界

錨點不消耗字元,只檢查「目前掃到的位置」合不合條件。少了它們,模式常會在字串中間誤中。

^$

預設:

  • ^:整個字串的開頭
  • $:整個字串的結尾(字串末若有一個換行,$ 仍可對在換行前)
import re

print(bool(re.search(r"^\d+$", "2026")))     # True,整串都是數字
print(bool(re.search(r"^\d+$", "A2026")))    # False
print(bool(re.search(r"\d+", "A2026")))      # True,只要求「有一段數字」

驗證「整份輸入合格式」時,用 ^...$,或改用 re.fullmatch(見 search / match)。

加上 re.MULTILINEre.M)後,^ $ 會對每一行的行首/行尾:

import re

log = "ERROR disk full\nINFO started\nERROR timeout"
print(re.findall(r"^ERROR.*", log, flags=re.M))
# ['ERROR disk full', 'ERROR timeout']

\A\Z

\A 永遠是字串開頭,\Z 永遠是字串結尾,不受 re.M 影響。寫「整份檔案只能這樣」時比 ^ $ 更不容易被旗標改掉。

單字邊界 \b

\b 在「\w\W 交界」的位置(含字串兩端)。\B 則是「不是邊界」。

import re

text = "cat scatter category cat."
print(re.findall(r"\bcat\b", text))  # ['cat', 'cat']
print(re.findall(r"cat", text))      # 連 scatter、category 裡的 cat 也中

Python 的 \w 含 Unicode 字母,所以中文詞的「邊界」跟英文不一樣。對中文關鍵字搜尋,\b 常常不如你想的那樣好用;改用明確前後文或乾脆 in

相關資料