在 Visual Studio Code 中使用正規表達式進行高級搜尋與取代
訂閱 480
VSCode 使用 regex 正規表達式尋找取代(語法詳細說明與範例)影片示範 YouTube
前言
正規表達式是處理文字搜尋和取代的強大工具,特別是在複雜的比對案例中。Visual Studio Code(VSCode)內建了完整的正規表達式支援,讓文字的編輯處理更加高效。
在 Visual Studio Code 中啟用正規表達式
在開始使用正規表達式之前,需要確保已啟用該功能:點選搜尋面板中的使用規則表達式按鈕,或使用鍵盤快速鍵Alt+R。
啟用後,即可在尋找條件和取代內容中書寫正規表達式。
常見跳脫序列
跳脫字元\可以跳脫正規表達式中的一些語法符號。比如,\\表示反斜線自身,\[表示左方括弧,\)表示右圓括弧。
以下是 VSCode 中常見的跳脫序列。
- \d
任意某個數值字元(
0到9)。比如,1\d3比對表示以1開頭以3結尾的三位數的文字。- \w
任意某個單字字元(字母、數值、底線,不包含中文字元)。比如,
set_\w\w\w\w比對以set_開頭後接四個單字字元的文字。- \s
任意某個空白字元(空格、定位字元、換行字元)。
def\s比對以def開頭後接一個空白字元的文字。- \D
任意某個非數值字元。
- \W
任意某個非單字字元。
- \S
任意某個非空白字元。
- \n
換行字元。
- \r
歸位字元。
- \t
定位字元。
- \xHH
HH表示 Unicode 編碼(十六進位的兩位數),\xHH比對該編碼表示的字元。比如,\x20表示了空格。- \uHHHH
HHHH表示 Unicode 編碼(十六進位的四位數),\uHHHH比對該編碼表示的字元。比如,\u4e00與\u9fa5,可作為漢字字元的開始和結束。
比對字元集中的字元
使用方括弧[]可以比對一系列字元(字元集)中的某一個字元。
範例 含義 [\w] 任意單字字元 [a-d] a 到 d 之間的字母 [0-3] 0 到 3 之間的數值 [\u4e00-\u9fa5] 漢字字元 [\(\)\[\]\{\}] 各種括弧 [你我他] 特定中文字元
如果使用[^],則將比對非字元集中的字元。
範例 含義 [^A-D1-4] 非 A 到 D 且非 1 到 4 的字元 [^^] 非 ^ 字元
比對次數
在 VSCode 中,同樣支援控製比對次數的數量詞,可以簡化正規表達式的書寫。
- *
比對零次或多次。比如,
abc*比對ab,abc,abcc等。- +
比對一次或多次。比如,
abc\s+表示abc後,至少有一個空白字元。- ?
比對零次或一次。
- {n}
比對
n次。比如,[abc]{3}表示由abc隨意組成的三個字元。- {n,m}
比對
n到m次。
如果需要盡量少的比對字元,則可以在數量詞後加?,以實作最小相符。
範例 含義 如果.*那麽 貪心比對,在「如果」和「那麽」之間,比對盡可能多的內容。 如果.*?那麽 非貪心比對,在「如果」和「那麽」之間,比對盡可能少的內容。
比對位置
在 VSCode 中,可使用如下方式來比對一個位置。
- ^
行開頭,
^msg比對行開頭的msg。- $
行結尾,
"$比對行結尾的引號。- \b
單字界限,
\bname\b比對完整單字name。
群組與參考
VSCode 正規表達式支援群組功能,可在表達式的其他部分來參考群組。尋找時可通過\n的形式來參考,取代時可通過$n的形式來參考,其中n為群組的序號,預設從1開始。
範例 含義 ("{3}|'{3}|"|') 比對 Python 中的四種引號類型。 ("|')My name\1 比對 "My name" 或 'My name'。 $1Your name$1 可將上例中的 'My name',取代為 'Your name',或將 "My name" 取代為 "Your name"。
斷言
正規表達式中的斷言,可被視為一種位置檢測,分為以下四種。斷言內容不包含在比對結果中,並且可用於後續的比對程序。
- (?<=PATTERN)
正向後行斷言,位置之前的內容與子表達式
PATTERN相符。- (?<!PATTERN)
負向後行斷言,位置之前的內容不與子表達式
PATTERN相符。- (?=PATTERN)
正向先行斷言,位置之後的內容與子表達式
PATTERN相符。- (?!PATTERN)
負向先行斷言,位置之後的內容不與子表達式
PATTERN相符。
範例 含義 (?<=')Hello 比對前面有單引號的 Hello,但不包含引號。