多种实际使用场景,正则表达式带来丰富可能性 | 您所在的位置:网站首页 › 正则包含 › 多种实际使用场景,正则表达式带来丰富可能性 |
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 中也是同样的操作。 ![]() 当然了,为了使用正则表达式的匹配模式,需要在 VSCode 和 Sublime Text 中查找时点亮「.*」的标记。这个按钮在 VSCode 查找框内的最右侧,在 Sublime Text 查找栏的左上角。 现在可以来稍微解释一下这里用到的两个表达式了。 在「查找」框中,我们填入的是 \d+,意思是「一个或更多的数字」。正则表达式中,\d 表示「数字」,而 + 表示「一个或更多」。 ![]() 在「替换」框中,我们填入的是 "$0",很好理解,就是在前面查找出来的每一个结果两侧加上 " 双引号。这里,$0 可以用来「引用」整个匹配到的结果。 ![]() 当然了,替换时的 $ 符号还可以有 $1、$2、$3…… ![]() 还是刚才的那些手机号,现在换成了稍微复杂一些的规则。查找时,输入的规则是 (\d{3})(\d{4})(\d{4}),替换时的规则是 $1-$2-$3。最后,我们得到了: ![]() 在这个规则中,\d{3} 意味着「3个数字」,\d{4} 以为着「4个数字」。于是我通过 \d{3}\d{4}\d{4} 这样一个规则,把号码分成了 3、4、4 的三段。对于匹配到的每一段,我都加上了一个括号。 ![]() 于是,当我们在「替换」中输入 $1 的时候,它会从「查找」框中寻找第一个括号,并使用匹配到的第一个括号里的内容来替换 $1 的部分。至于 $2 和 $3,便是在查找时去匹配第二、第三个括号中的内容。 它让 Everything 的搜索比快更快Everything 是 Windows 上一款颇受好评的文件搜索工具,在 Windows 上实现了文件「即时搜索」的效果。 然而,Everything 搜索文件虽然很快,但是遇到文件名记不清的情况,就只能输入几个关键词,在搜出的一大片文件列表中逐个确认,未免有些费时。 我曾经保存了一个图片,名字就叫 apple,但是却忘记了它的文件格式。到底是 jpg 还是 png?还是 gif 或者 bmp?也可能是 jpeg 或者 webp? 直接使用 Everything 的普通模式搜索时,会出现数百个结果。 ![]() 使用快捷键 Ctrl+R 打开「正则表达式」的开关,就可以使用正则表达式来进行匹配了。打开后,在 Everything 右下角的状态栏中会出现「正则表达式」的文字。 ![]() 这样一来,搜索结果就只剩下了 4 个,寻找起来比刚才省事很多。 我在这里使用的正则表达式也并不复杂。^apple\..{3,}$ 中, ^ 和 $ 分别表示文件名的起始位置和结束位置,意味着在匹配到的结果前后都不再有其他字符。\. 表明一个小数点 .,也就是文件名和扩展名之间间隔的那个点。后面的 .{3,} 意味着「3 个或更多的任意字符」,匹配了扩展名中可能存在的 3 个或更多字符。 ![]() 市面上也有一些其他文件搜索工具,使用了和 Everything 相似的技术原理,却鲜见对正则表达式的完备支持。然而,如果没有了正则表达式,这些文件搜索工具速度再快,也是没有灵魂的。 它让 Tasker 和快捷指令锦上添花当你在你的 Android 手机上收到一条验证码,如何把它快速复制到你的剪贴板里呢?现在各大定制 OS 都提供了「复制验证码」的功能,但是仍需手动点击通知中的「复制」按钮。借助 Tasker 我们可以实现更加自动化的复制。 设置 PROFILE,当收到新短信时触发 检查短信中是否包含验证码 如果包含验证码,提取并复制到剪贴板 直接在对应的 APP 里面粘贴对于其中的第二步「检查短信中是否包含验证码」,就又是正则表达式大展拳脚的地方了。 ![]() 我这里使用了一个简单粗暴的方式来检查验证码内容:是否包含连续 4-8 个数字。正则表达式用的是 \d{4,8},也就是从短信中寻找连续的 4-8 个数字,并放到剪贴板中。 iOS 上的「快捷指令」同样可以使用正则表达式进行匹配和替换。比如下图中的这个快捷指令,可以在分享知乎链接的时候,只复制最精简的的回答链接。 ![]() 如果直接复制,你得到的可能是这样一大段文字: 三体中,歌者为什么那么轻易就使用二向箔? — 王东凯陪你考注会 的回答 - 知乎 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 中搜索文件,亦或是在手机和平板电脑上进行自动化的操作,如果一个工具可以支持正则表达式,如果你能够善用正则表达式,那它一定会给你带来许多新的可能性。 > 下载少数派 客户端 、关注 少数派公众号 ,了解更精彩的数字生活 🍃 |
CopyRight 2018-2019 实验室设备网 版权所有 |