Regular-Expression
在 VIM 中加入一個組的所有匹配項
我正在嘗試編寫一個替換命令,該命令將搜尋包含至少 4 個由空格分隔的字母的文本並刪除空格:
%s/\v%(([a-zA-Z])\s){3,}([a-zA-Z])/\1\2/gc
但
L i g ht
變成
ght
正如預期的那樣,因為一個組僅包含
g
在這種情況下的最後一個匹配項。如何累積所有組的匹配\1
然後加入它們?
給定一個像
(...){n,m}
or這樣的重複組(...)+
,我認為 Vim 沒有辦法提取該組的每次出現。只有最後一個在所有與正則表達式相關的函式和命令中可用。也就是說,您可以使用嵌套替換:
:s/\v%([a-zA-Z]\s){3,}[a-zA-Z]/\=substitute(submatch(0), '\s', '', 'g')/gc
\=
替換中的A:s
使 Vim 將替換作為表達式計算。在該表達式中,我使用該函式刪除(由 獲得)substitute()
的整個匹配文本中的所有空格,從.:s
submatch(0)
Ligh``L i g h