正規表示式
系列【正規表示式】──把搜尋到的內容重新排列再取代
上一篇「系列【正規表示式】──一次找出不同日期」組出了這個正規表示式:
\d{4}年\d{1,2}月\d{1,2}日
它可以一次找出像下面這些日期:
這次我們再往前一步。
假設想把:
2026年9月1日
改成:
9/1/2026
這次不是把整個日期換成固定文字,而是要保留原本搜尋到的年、月、日,只改變它們的排列方式。
這時就會用到擷取群組。
把之後還要用的部分用括號括起來
上一篇的搜尋式是:
\d{4}年\d{1,2}月\d{1,2}日
之後還要再利用的部分有三個:
- 年前面的 4 位數字
- 月前面的 1~2 位數字
- 日前面的 1~2 位數字
因此,把這三個部分分別用括號括起來:
(\d{4})年(\d{1,2})月(\d{1,2})日
和上一篇相比,只是多了三組括號。
像 (\d{4}) 這樣,把正規表示式的一部分放進括號裡,就能把這一段實際搜尋到的文字保留下來,稍後再使用。
以 2026年9月1日 為例:
- (\d{4}) 找到的是
2026 - 第一個 (\d{1,2}) 找到的是
9 - 第二個 (\d{1,2}) 找到的是
1
可以把它想像成把搜尋結果暫時放進三個有編號的盒子裡。

圖1 括號括起來的部分會存成 $1、$2、$3,取代時再依需要的順序放回去
| 群組 | 裡面放的是什麼 | 2026年9月1日 的情況 |
|---|---|---|
| $1 | 年前面的 4 位數字 | 2026 |
| $2 | 月前面的 1~2 位數字 | 9 |
| $3 | 日前面的 1~2 位數字 | 1 |
群組會按照括號從左到右的順序編號。
這種用括號保留下來的部分,在正規表示式裡稱為擷取群組。
名字聽起來有點技術味,但一開始只要記住:
把之後還要用的內容放進有編號的盒子裡。
這樣就足夠了。
用 $1、$2、$3 把盒子裡的內容取出來
現在:
- 年在 $1
- 月在 $2
- 日在 $3
如果要把它改成月/日/年的順序,取代字串可以寫成:
$2/$3/$1
也就是:
- $2 →
9 - $3 →
1 - $1 →
2026
最後得到:
9/1/2026
這裡沒有重新計算任何數字,只是把剛才存進盒子裡的三段文字,依照新的順序拿出來而已。
補充:擷取群組的寫法會依工具而不同
本文依照 memoQ 使用的格式,以 $1、$2、$3 來表示取代時要取出的群組內容。其他工具或正規表示式引擎也可能使用 \1、\2、\3 等寫法。
另外,在日文系統或某些字型中,反斜線 \ 有時會顯示成半形日圓符號 ¥。
搜尋式不變,只改取代順序也可以
搜尋式仍然是:
(\d{4})年(\d{1,2})月(\d{1,2})日
只要改變取代字串,就能得到不同格式。
例如:
- $2/$3/$1 →
9/1/2026 - $3/$2/$1 →
1/9/2026 - $1-$2-$3 →
2026-9-1
並不是重新搜尋年月日,而是決定剛才保存好的三段內容要用什麼順序重新組合。
「年」「月」「日」為什麼沒有被留下來?
再看一次搜尋式:
(\d{4})年(\d{1,2})月(\d{1,2})日
年、月、日 雖然是搜尋條件的一部分,但沒有放在括號裡。
因此,它們會參與搜尋,卻不會被存進 $1、$2、$3。
也就是說,可以把:
- 搜尋時需要,但取代後不想留下的文字
- 搜尋後還要繼續使用的文字
分開處理。
這正是擷取群組很實用的地方。
$1 裡的內容每次都可能不一樣
$1 並不是永遠等於 2026。
例如 2025年12月31日:
- $1 →
2025 - $2 →
12 - $3 →
31
而 1999年1月10日 則是:
- $1 →
1999 - $2 →
1 - $3 →
10
所以 $1、$2、$3 並不代表某個固定數字。
比較好理解的方式,是把它們看成「指向當次搜尋結果的暫存盒」。
如果有寫程式的經驗,也可以把這個概念想成有點類似暫時使用的變數。
取代並不會「理解」文字的意思
假設原文是:
2026年09月01日
使用:
$2/$3/$1
取代後會得到:
09/01/2026
而不是:
9/1/2026
因為 $2 裡存的是 09,$3 裡存的是 01。
正規表示式不會判斷「這是月份,所以前面的 0 可以拿掉」,也不會替數字做運算。
它只是把搜尋時記住的文字原樣拿出來,再放到指定的位置。
實務上可以拿來做什麼?
這篇用日期來說明,是因為數字最容易看出「抓到哪裡、又放到哪裡」。
但擷取群組當然不只可以保存數字。
像 portion、electrode 這類單字,甚至是由多個單字組成的名詞片語,也可以搜尋、保留下來,再放進新的字串裡。
例如技術文件裡反覆出現:
the portion where an electrode is provided
如果想統一成:
the portion on which an electrode is provided
即使其中的 portion 或 electrode 在不同句子中換成其他單字或名詞片語,也可以把變動的部分擷取下來,再原封不動地放回取代後的句型中。
換句話說,正規表示式處理的不一定是完全相同的字串,也可以是:
文字內容會變,但整體結構相同的模式。
單字與名詞片語的搜尋
這篇刻意先用數字來說明,是為了把擷取群組與取代的機制看清楚。至於如何用正規表示式搜尋會變動的單字、名詞片語以及其他文字模式,會在之後的文章中再另外介紹。
在翻譯與 QA 工作裡,「字本身每次不同,但句型或結構重複出現」的情況並不少見。這正是擷取群組特別好用的地方。
memoQ 的搜尋與取代也可以使用這種方式。一次大量取代之前,建議先確認搜尋結果,確定只有預期的內容會被修改。
這次先記住這幾件事
把之後還要用的部分用括號括起來:
(\d{4})年(\d{1,2})月(\d{1,2})日
括號會從左到右對應:
$1、$2、$3……
接著在取代字串中,按照需要的順序把它們放回去:
$2/$3/$1
於是:
2026年9月1日
就可以變成:
9/1/2026
一開始看到括號和 $1 可能會覺得有點陌生,但概念其實很簡單:
先把需要的內容放進編號盒子,再按照想要的順序拿出來。
理解這一步之後,正規表示式就不只是「搜尋工具」,而是可以在保留重要內容的同時,大量重新整理文字格式的實用工具。