正規表示式
系列【正規表示式】──AI 時代依然實用的知識
現在,只要把需求告訴 AI,簡單的巨集或小型程式往往很快就能完成。我自己也幾乎不再從頭撰寫程式碼了。
不過,有一項工具直到現在,我仍然經常親自使用。
那就是正規表示式。
過去為了提升翻譯與 QA 作業的效率,我曾自行摸索 Word VBA、秀丸(Hidemaru)巨集以及各種程式語言,也寫過不少用來簡化工作的巨集和小工具。
開始使用 memoQ 之後,需要自己撰寫巨集的機會少了很多。不過,在 memoQ 之外進行某些作業時,過去累積下來的一些巨集至今仍然派得上用場。
近年 AI agent 與 vibe coding(透過自然語言指示 AI 撰寫程式碼的開發方式)逐漸普及,需要親自寫程式碼的情況又更少了。
即使如此,正規表示式依然沒有退場。
網路上介紹正規表示式的文章已經非常多。本系列並不打算再做一本完整的語法手冊,而是希望從最基礎的概念開始,慢慢介紹正規表示式在翻譯與 QA 實務中有哪些好用之處。
什麼是正規表示式?
簡單來說,正規表示式就是「用文字的規律或模式來搜尋內容的方法」。
一般的搜尋,是找出與輸入內容相同的文字。
例如搜尋「2026年」,就會找到「2026年」。
正規表示式則可以不指定某一組固定文字,而是指定像「4 個數字+年」這樣的模式。
如此一來,不只是「2026年」,連「2027年」、「1900年」等符合相同模式的文字,都可以一次找出來。
這就是正規表示式最基本的概念。
圖 1 一般搜尋與正規表示式搜尋的差異,以及 \d{4}年 與字串之間的對應關係。
從最基礎開始──先認識這 4 個表示式
正規表示式裡有許多特殊符號。
第一次看到時,可能會覺得有點像密碼。不過,並不需要一開始就把所有寫法全部背下來。實際使用時,經常出現的表示式其實沒有想像中那麼多。
先從下面 4 個開始即可。
| 表示式 | 意義 |
|---|---|
| \d | 1 個數字 |
| + | 前一個字元或表示式重複 1 次以上 |
| {4} | 前一個字元或表示式剛好重複 4 次 |
| . | 換行以外的任意 1 個字元 |
\d──1 個數字
首先,
\d
代表 1 個數字。
例如「1」、「5」、「9」這些數字都可以被搜尋到。
+──重複 1 次以上
接著,在 \d 後面加上 +:
\d+
意思就變成「連續出現 1 個以上的數字」。
因此,下面這些內容都能找到:
3202610000
這裡真正重要的,不是把 \d+ 當成一整串符號背起來。
\d 是「1 個數字」,+ 是「前面的表示式重複 1 次以上」。把兩者組合起來,就成了「1 個以上連續出現的數字」。
正規表示式其實就是這樣,把一個個小零件組合起來使用。
{4}──剛好重複 4 次
這次在 \d 後面加上 {4}:
\d{4}
意思是「剛好有 4 個數字連續出現」。
例如:
2026
或
1900
都符合這個模式。
正規表示式後面也可以直接接一般文字。
例如:
\d{4}年
就可以找到:
1900年2026年2027年
這時搜尋的已經不是「2026年」這一組固定文字,而是「4 個數字後面接著『年』的字串」。
.──任意 1 個字元
. 代表換行以外的任意 1 個字元。
例如:
第.章
可以找到:
第1章第2章第一章
因為「第」與「章」之間,都剛好有 1 個字元。
這個表示式非常方便,但因為範圍很廣,也比較容易搜尋到原本沒有預期的內容。實際使用時,最好一邊確認搜尋結果一邊使用。
正規表示式不是拿來「死背」的
看到這裡,正規表示式可能還是有點像一堆特殊符號。
不過,完全不需要從一開始就把複雜的表示式整串背起來。
例如:
\d{4}年
其實只是由 3 個部分組合而成:
- \d = 1 個數字
- {4} = 剛好重複 4 次
- 年 = 文字「年」
合起來就是:
4 個數字+年
先想清楚自己想找的是什麼,再把它拆成幾個小部分,最後將對應的表示式組合起來。
掌握這個思考方式之後,正規表示式其實沒有表面上看起來那麼難。
尤其是翻譯與 QA 這類每天需要處理大量文字的工作,只要懂得一些基本寫法,就能在不少地方省下時間。
下一篇預告
這一篇先從最基本的地方開始,介紹了正規表示式的概念和幾個簡單的表示式。
下一篇,我們來看一個更接近實務的例子。
例如:
2026年9月1日2025年12月31日1999年1月10日
這些日期的年、月、日都不相同。
如果不想一個日期一個日期分別搜尋,要如何用一個正規表示式一次把它們全部找出來呢?
下一篇會在這次介紹的內容上,再加入少量新的寫法,一步一步組合出可以搜尋日期的正規表示式。
再下一篇,則會進一步把搜尋到的日期改成其他格式,例如:
2026年9月1日 → 9/1/2026
這類美國常見的「月/日/年」格式,或:
2026年9月1日 → 1/9/2026
這類歐洲常見的「日/月/年」格式。
先學會「搜尋」,再進一步學「取代」。
我們會一次增加一點點,慢慢把正規表示式可以做到的事情擴展開來。