在 Visual Studio Code 中使用正则表达式进行高级搜索与替换
关注 1800
如何在 VSCode 中使用正则表达式查找替换?语法详解与示例视频演示 YouTube如何在 VSCode 中使用正则表达式查找替换?语法详解与示例视频演示 Bilibili
引言
正则表达式是处理文本搜索和替换的强大工具,特别是在复杂的匹配场景中。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,但不包含引号。
讲解视频
如何在 VSCode 中使用正则表达式查找替换?语法详解与示例·YouTube如何在 VSCode 中使用正则表达式查找替换?语法详解与示例·Bilibili