正则指引¶
预计阅读时长 : 12 分钟
基本概念¶
正则表达式是一种用于匹配字符串模式的强大工具。它由一系列字符和特殊符号组成,可以用来描述复杂的搜索模式。
正则表达式可以用于文本搜索和替换操作,以及数据验证。举个最最简单的例子,例如 中医院
、 中医医院
和 中心医院
这三个词,使用正则 中\S*医院
就可以同时匹配。
正则表达式在被执行的时候,可以分为两个大的环节:先匹配位置,再匹配文本。以 (?<=武汉市)中\S*?(医|疗养)院
这个正则表达式为例,匹配流程可以细分为以下 3 个部分:
(?<=武汉市)
:查找文中所有的 “武汉市”,并定位到 “市” 后面的位置中\S*?(医院 | 疗养所)
:严格按照以下顺序,判断 “市” 后面是否是相应的文字中
:是否紧接着 “中”\S*?
:是否紧接着 0 个或者多个文字,文字数量要尽可能的少(医院 | 疗养所)
:是否紧接着 “医院” 或者 “疗养院”
- 如果 1 和 2 的条件都严格满足,则匹配成功;如果有任一条件不能满足,则匹配不成功
- 匹配成功:武汉市中医院、武汉市中心医院
- 匹配不成功:武汉市西医院、武汉市医院中心、宜昌市中心医院
在这个过程中,又涉及到字符组、量词、分组、断言、匹配模式等一系列的专有概念。
看起来是不是很复杂?其实真的也挺复杂的,😇 。不过现在有了 GPT 啊,把需求描述清楚,让 GPT 来帮你写就好了。
快捷操作¶
作为一个文本匹配工具,正则表达式并没有什么能单独发挥作用的场景,但当它与复制、黏贴和替换这些流程融合之后,就变成了一把能屡建奇功的瑞士军刀。
快速选择编辑¶
先说一个不需要使用正则表达式的文本选择高级技巧。当在 VS Code 选中一段文本时,编辑器会自动查找匹配文件中其他位置相同的文本。这时,如果有编辑的需求,则可以先通过 Cmd+D 逐个添加选中,或者通过 Option+Cmd+D 全部选中,之后再进行批量修改。
当前文件查找替换¶
除了上面的快捷操作外,还可以通过 Cmd+F 唤出搜索替换面板。只需在查找框中输入需要查找的文本,即可进行实时查找。如果有替换的需求,那在下方的替换框中输入需要替换的文本,再点击批量替换按钮即可完成相应操作。
而不论是搜索还是替换,都能通过开关支持正则表达式,进而实现复杂的批量操作。
多文件查找替换¶
在运营的日常工作中,还有一个常见而让人头大的场景:对多个文件中相同文本批量进行搜索和替换。
在 VS Code 中,可以通过侧边栏的 唤出多文件搜索替换面板。在这个面板中,可以通过正则表达式来匹配需要查找的文本,然后通过替换框中的正则表达式来进行批量替换。
快速文本提取¶
如果说上述的查找和修改操作,都属于哪怕效率低点,也还能靠怼时间和人力勉力完成的任务。那么如果想要从大量的文本中,批量提取或者排除符合要求的部分,就属于不掌握点技巧就只能干瞪眼的任务了。
通过使用 Filter Lines ⧉ 扩展可以轻松满足这个需求。 通过 Cmd+L 可以唤出提取面板,然后根据关键词或者正则表达式将符合条件的行提取到新的文件中,而使用 Option+Cmd+L 可以通过排除法将符合条件的行提取到新的文件中。
正则脚本替换¶
上面的场景都是一些临时性的一次性需求,如果有一些常用的正则表达式替换需求,那可以通过Replace Rules ⧉ 这个扩展预设正则表达式脚本来实现。
先在配置文件中按如下示例进行配置,然后通过 Cmd+R 可以唤出单条规则列表,通过 Option+Cmd+R 可以唤出编组规则列表,最后选择对应的脚本,即可自动完成基于正则表达式的查找和替换操作。
- 匹配用正则表达式
- 替换用正则表达式
复制粘贴预处理¶
还有一个更加优雅的处理方式,就是在复制粘贴的时候,直接使用正则对文本进行预处理。通过Markdown Paste ⧉ 扩展,可以通过预设好的正则规则,先对文本进行一次处理,然后直接黏贴处理之后的文本。
- 匹配用正则表达式
- 替换用正则表达式
参考资料¶
速查手册¶
正则表达式 30 分钟入门教程 ⧉ 是最经典也最精简的正则表达式速查手册,尤其是在掌握了正则表达式的基础知识之后,哪怕长时间不用有些遗忘,也能通过这个页面快速回想起对应的用法来。
这个页面中还有常见正则表达式的链接,配合 @zz
的正则模版,可以覆盖大多数的常见正则需求。
可视化工具¶
正则可视化 ⧉ 工具挺多,但论对中文的完备支持,这个工具是我目前发现的体验最好的。
不过需要注意的是,这个可视化工具的正则语法基于 Node,虽然大多数情况下都和 VS Code 中的 .NET 语法通用,但可能还是会出现一些差异的情况。
中文教程:¶
想要真正的深入研究正则表达式,尤其是要有效处理各种复杂的中文问题,正则指引 (第二版) ⧉ 属于必看书目。
在书中,作者深入讲解了正则表达式的语法细节,以及隐藏在语法之后的基本原理,让我这样喜欢刨根问底的人看得十分过瘾。
事实上,我是把这边书当枕边书来看的。作为一个数学渣,这个书属于我少数能完全看懂的可以锻炼脑力的技术书籍。睡前看上 15 分钟,困意忍不住就会袭来,一夜好梦等着我……