惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
J
Java Code Geeks
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
IT之家
IT之家
博客园_首页
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
B
Blog
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
博客园 - 聂微东
腾讯CDC
A
About on SuperTechFans

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
多种实际使用场景,正则表达式带来丰富可能性 - 少数派
2020-05-25 · via 少数派

Matrix 精选

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


正则表达式原本是计算机科学里的术语,后来引入到程序语言中,在工程上也广泛应用。不过,对于大部分读者来说,即使我们不写程序、不做计算机技术相关工作,依然可以在生活、工作中尝试使用正则表达式。许多时候,若是使用正则表达式来完成,往往可以事半功倍。

它让 VSCode 的「查找」「替换」如虎添翼

我们在日常生活或者工作中,总是会碰到需要「批量处理文本」的时候。昨天我朋友在烦恼工作上的一件小事情。她需要处理数百个手机号,每行一个,需要在每个手机号的前后分别加上一个双引号。

13100002222
13100003333
13100004444
13100005555
13312345678
13987654321

最终变成:

"13100002222"
"13100003333"
"13100004444"
"13100005555"
"13312345678"
"13987654321"

也许你会选择手动一行一行敲入引号 ",亦或会动用 Excel 中强大的公式。然而,使用 Visual Studio Code、Sublime Text 等支持正则表达式替换的文本编辑器,这完全是小菜一碟。

在 VSCode 中,首先使用 option+command+F(macOS) 或者 Ctrl+H (Windows)打开「查找替换」栏。在第一行「查找」框中输入 \d+,在第二行「替换」框中输入 "$0",最后点击「替换全部」按钮(在「替换」框右侧的第二个按钮),所有操作就都完成了。

在 Sublime Text 中也是同样的操作。

Kapture 2020-05-24 at 10.34.06

当然了,为了使用正则表达式的匹配模式,需要在 VSCode 和 Sublime Text 中查找时点亮「.*」的标记。这个按钮在 VSCode 查找框内的最右侧,在 Sublime Text 查找栏的左上角。

现在可以来稍微解释一下这里用到的两个表达式了。

在「查找」框中,我们填入的是 \d+,意思是「一个或更多的数字」。正则表达式中,\d 表示「数字」,而 + 表示「一个或更多」。

200524_124010

在「替换」框中,我们填入的是 "$0",很好理解,就是在前面查找出来的每一个结果两侧加上 " 双引号。这里,$0 可以用来「引用」整个匹配到的结果。

200524_130713

当然了,替换时的 $ 符号还可以有 $1$2$3……

200524_105251

还是刚才的那些手机号,现在换成了稍微复杂一些的规则。查找时,输入的规则是 (\d{3})(\d{4})(\d{4}),替换时的规则是 $1-$2-$3。最后,我们得到了:

在这个规则中,\d{3} 意味着「3个数字」,\d{4} 以为着「4个数字」。于是我通过 \d{3}\d{4}\d{4} 这样一个规则,把号码分成了 3、4、4 的三段。对于匹配到的每一段,我都加上了一个括号。

200524_132220

于是,当我们在「替换」中输入 $1 的时候,它会从「查找」框中寻找第一个括号,并使用匹配到的第一个括号里的内容来替换 $1 的部分。至于 $2$3,便是在查找时去匹配第二、第三个括号中的内容。

它让 Everything 的搜索比快更快

Everything 是 Windows 上一款颇受好评的文件搜索工具,在 Windows 上实现了文件「即时搜索」的效果。

然而,Everything 搜索文件虽然很快,但是遇到文件名记不清的情况,就只能输入几个关键词,在搜出的一大片文件列表中逐个确认,未免有些费时。

我曾经保存了一个图片,名字就叫 apple,但是却忘记了它的文件格式。到底是 jpg 还是 png?还是 gif 或者 bmp?也可能是 jpeg 或者 webp?

直接使用 Everything 的普通模式搜索时,会出现数百个结果。

200524-145846

使用快捷键 Ctrl+R 打开「正则表达式」的开关,就可以使用正则表达式来进行匹配了。打开后,在 Everything 右下角的状态栏中会出现「正则表达式」的文字。

200524-150753

这样一来,搜索结果就只剩下了 4 个,寻找起来比刚才省事很多。

我在这里使用的正则表达式也并不复杂。^apple\..{3,}$ 中, ^$ 分别表示文件名的起始位置和结束位置,意味着在匹配到的结果前后都不再有其他字符。\. 表明一个小数点 .,也就是文件名和扩展名之间间隔的那个点。后面的 .{3,} 意味着「3 个或更多的任意字符」,匹配了扩展名中可能存在的 3 个或更多字符。

200524_152750

市面上也有一些其他文件搜索工具,使用了和 Everything 相似的技术原理,却鲜见对正则表达式的完备支持。然而,如果没有了正则表达式,这些文件搜索工具速度再快,也是没有灵魂的。

它让 Tasker 和快捷指令锦上添花

当你在你的 Android 手机上收到一条验证码,如何把它快速复制到你的剪贴板里呢?现在各大定制 OS 都提供了「复制验证码」的功能,但是仍需手动点击通知中的「复制」按钮。借助 Tasker 我们可以实现更加自动化的复制。

  1. 设置 PROFILE,当收到新短信时触发
  2. 检查短信中是否包含验证码
  3. 如果包含验证码,提取并复制到剪贴板
  4. 直接在对应的 APP 里面粘贴

对于其中的第二步「检查短信中是否包含验证码」,就又是正则表达式大展拳脚的地方了。

我这里使用了一个简单粗暴的方式来检查验证码内容:是否包含连续 4-8 个数字。正则表达式用的是 \d{4,8},也就是从短信中寻找连续的 4-8 个数字,并放到剪贴板中。

iOS 上的「快捷指令」同样可以使用正则表达式进行匹配和替换。比如下图中的这个快捷指令,可以在分享知乎链接的时候,只复制最精简的的回答链接。

IMG_F3E6E86E09E9-1

如果直接复制,你得到的可能是这样一大段文字:

三体中,歌者为什么那么轻易就使用二向箔? — 王东凯陪你考注会 的回答 - 知乎 https://www.zhihu.com/question/304759872/answer/1079833112?utm_source=ZHShareTargetIDMore&utm_medium=social&utm_oi=26915779903488

而借助这个快捷指令,你可以直接获得下面的链接:

https://www.zhihu.com/question/304759872/answer/1079833112

用于匹配的正则表达式是这样的:

https://www.zhihu.com/question/\d+/answer/\d+

它可以寻找到符合格式要求的网址,并通过后续的动作复制到剪贴板中。

总之,无论是在 Windows 和 macOS 上处理文本,还是在 Everything 中搜索文件,亦或是在手机和平板电脑上进行自动化的操作,如果一个工具可以支持正则表达式,如果你能够善用正则表达式,那它一定会给你带来许多新的可能性。

> 下载少数派 客户端 、关注 少数派公众号 ,了解更精彩的数字生活 🍃