正则表达式入门课
涂伟忠
高级研发工程师
24700 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 18 讲
正则表达式入门课
15
15
1.0x
00:00/09:50
登录|注册

09 | 应用2:如何在编辑器中使用正则完成工作?

讲述:涂伟忠大小:9.01M时长:09:50
使用 sort、uniq 命令统计单词出现次数
使用编辑器提取文章中的单词
统计单词出现次数的练习
结合其他方法高效地完成文本处理工作
使用正则进行文本内容提取、替换等操作
提高文本处理效率的操作方式
内容切割
内容验证
内容替换
内容提取
竖向编辑
多焦点编辑
光标移动和文本选择
课后思考
总结
在编辑器中使用正则
编辑器功能
如何在编辑器中使用正则完成工作?

该思维导图由 AI 生成,仅供参考

你好,我是伟忠。今天我来和你分享一下,在常见的编辑器中如何使用正则来完成工作。
你可能要问了,这是正则专栏,为啥不直接开始讲正则?其实我给你讲的编辑器使用技巧,能够帮助我们更好地完成工作。因为我们学习正则的目的,就是想高效地完成文本处理。
但在实际工作中,我们一般不会只用正则,而是通常将编辑器的特性和正则结合起来,这样可以让文本处理工作更加高效。正所谓“工欲善其事,必先利其器”,你花点时间来了解一下编辑器的各种特性,可以少写很多代码。

编辑器功能

接下来,我以 Sublime Text 3 为例,给你讲讲一些在编辑器里的强大功能,这些功能在 Sublime Text、Atom、VS Code、JetBrains 系列(IntelliJ IDEA/PyCharm/Goland 等) 中都是支持的。

光标移动和文本选择

在常见的编辑器、IDE、甚至 Chrome 等浏览器中,我们编辑文本时,使用键盘的左右箭头移动光标,可以按住 Shift 键来选中文本。在左右移动时,如果你按住 Alt(macOS 的 option),你会发现光标可以“按块移动”,快速移动到下一个单词。两种方式组合起来,你可以快速选择引号里面的内容。
你可以动手练习一下,熟悉一下这些操作。你可能会说,有必要么,我用鼠标拖一下不就可以了?你说得没错,但这个功能和后面我要讲的多焦点编辑、竖向编辑等结合起来,就可以快速多行操作,这是鼠标做不到的。

多焦点编辑

在 IDE 中,我们如果想对某个变量或函数重命名,通常可以使用重构(refactor)功能。但如果处理的不是代码,而是普通文本,比如 JSON 字符串的时候,就没法这么用了。不过现在很多编辑器都提供了多焦点编辑的功能。
比如选择单词 route 之后,点击菜单 Find -> Quick Find All 就可以选中所有的 route 了。你可以进行多焦点编辑,非常方便。我给了你一个测试文本,你可以点击这里获取。
这个特性结合光标移动,可以快速提取某些内容,比如提取 JSON 中的姓名和手机号。选中所有的字段和值之间的字符(": ") 之后,按住 Shift+Alt(macOS 上是 Shift + Option),用箭头移动光标,可以快速选择到另外一个引号前,然后剪切,再找个空白地方粘贴就可以了。
{
"error_code": 0,
"result": {
"data": [
{
"name": "朱小明",
"tel": "138xx138000"
},
{
"name": "王五",
"tel": "139xx139000"
}
]
}
}
详细操作你可以看一下这个小视频。
00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00

    竖向编辑

    在编辑多行时,如果我们需要编辑的内容都是纵向上同一个位置,就可以使用 Alt (macOS 上是 Option)加上鼠标拖拽的方式来选择(或者尝试按下鼠标中键拖拽)。比如下图,当你选择了左侧的两个空格之后,可以批量编辑,比如修改成四个空格。将竖向编辑和刚刚上面说到的光标移动结合起来,会非常方便。

    在编辑器中使用正则

    正则是一种文本处理工具,常见的功能有文本验证、文本提取、文本替换、文本切割等。有一些地方说的正则匹配,其实是包括了校验和提取两个功能。
    校验常用于验证整个文本的组成是不是符合规则,比如密码规则校验。提取则是从大段的文本中抽取出需要的内容,比如提取网页上所有的链接。在使用正则进行内容提取时,要做到不能提取到错误的内容(准确性),不能漏掉正确的内容(完备性)。这就要求我们写正则的时候尽量考虑周全。但是考虑周全并不容易,需要我们不断地练习、思考和总结。

    内容提取

    我以编辑器 Sublime Text 3 为例来进行讲解,下图是编辑器 Sublime Text 查找界面的介绍。
    我们来尝试使用 sublime 提取文本中所有的邮箱地址,这里并不要求你写出一个完美的正则,因此演示时,使用\S+@\S+\.\S+ 这个正则。另外我们可以加上环视,去掉尾部的分号。你可以在这里随机生成一些邮箱用于测试。
    你可能会有疑问,我直接找到最后的分号,然后删除掉不就可以了么?这个例子是没问题的,但如果文本中除了邮箱之外,还有其它的内容这样就不行了,这也是正则比普通文本强大的地方。

    内容替换

    说完了查找,我们再来看一下替换。之前课程里我们也有讲过,这里再来回顾一下。下图是编辑器 Sublime Text 替换界面的介绍。
    同样是上面邮箱的例子,我们可以使用子组和引用,直接替换得到移除了分号之后的邮箱,我们还可以在邮箱前把邮箱类型加上。操作前和操作后的示意图如下:
    替换和提取的不同在于,替换可以对内容进行拼接和改造,而提取是从原来的内容中抽取出一个子集,不会改变原来的内容。当然在实际应用中,可以两个结合起来一起使用。

    内容验证

    在编辑器中进行内容验证,本质上和内容提取一样,只不过要求编辑器中全部内容都匹配上,并且匹配次数是一次。

    内容切割

    在编辑器中进行内容切割,本质上也和内容提取一样,用什么切割,我们就提取什么,选中全部之后,把选中的内容删除掉或者编辑成其它的字符。
    刚刚我们讲解了在 Sublime Text 中使用正则处理文本的方法,其它的编辑器或 IDE,如 Atom、VS Code、JetBrains 系列(IntelliJ IDEA/PyCharm/Goland 等)等,也都是类似的,你可以在自己喜欢的编辑器中练习一下今天讲到的内容。
    这里给出一些主流跨平台编辑器 /IDE 对正则的支持情况,你可以参考一下。

    总结

    好了,今天的内容讲完了,我来带你总结回顾一下。
    今天我们学习了编辑器中一些提高文本处理效率的操作方式:光标移动和选择、多焦点编辑以及竖向编辑。学会了这些,即使不使用正则,我们在编辑器中处理文本效率也会大大提高。接着通过一些示例,我们学习了在编辑器中使用正则来进行文本内容提取,内容替换等操作。正则的使用一般会和其它的方法结合起来,最终帮助我们高效地完成文本的处理工作。
    今天所讲的内容总结脑图如下,你可以回顾一下:

    课后思考

    最后,我们来做一个小练习吧:统计一篇英文文章中每个单词出现的次数,使用 Sublime Text 等编辑器提取文章里所有的单词,处理成一行一个单词,保存到文件中,然后再使用 sort、uniq 等命令统计单词出现的次数。
    为了帮你更好地完成这个任务,你可以参考一下下面的提示:
    windows 上的同学可以使用 git for windows 工具。
    使用 uniq 前需要先用 sort 命令排序,uniq -c 可以统计次数。
    sort words.txt | uniq -c
    如果想取前10名,可以继续对结果排序
    sort words.txt | uniq -c | sort -nrk1 | head -n10
    至于为什么要加 n、r 和 k1 你可以通过 man sort 看一下说明
    好,今天的课程就结束了,希望可以帮助到你,也希望你在下方的留言区和我参与讨论,并把文章分享给你的朋友或者同事,一起交流一下。
    确认放弃笔记?
    放弃后所记笔记将不保留。
    新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
    批量公开的笔记不会为你同步至部落
    公开
    同步至部落
    取消
    完成
    0/2000
    荧光笔
    直线
    曲线
    笔记
    复制
    AI
    • 深入了解
    • 翻译
      • 英语
      • 中文简体
      • 中文繁体
      • 法语
      • 德语
      • 日语
      • 韩语
      • 俄语
      • 西班牙语
      • 阿拉伯语
    • 解释
    • 总结

    编辑器中使用正则表达式可以帮助提高文本处理效率。本文介绍了在常见编辑器中如何结合正则表达式和编辑器功能,例如光标移动和文本选择、多焦点编辑、竖向编辑等,来快速高效地处理文本。通过示例演示了在编辑器中使用正则表达式进行内容提取、替换、验证和切割的操作方法。同时,还提供了一些跨平台编辑器/IDE对正则的支持情况。总结了编辑器中一些提高文本处理效率的操作方式以及在编辑器中使用正则进行文本内容处理的方法。最后,提出了一个小练习,帮助读者巩固所学知识。整体而言,本文内容丰富,涵盖了编辑器中使用正则的方方面面,对读者进行了全面的指导和帮助。

    2020-07-0118人觉得很赞给文章提建议

    仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
    《正则表达式入门课》
    新⼈⾸单¥59
    立即购买
    登录 后留言

    全部留言(8)

    • 最新
    • 精选
    • 虹炎
      课后练习后总结: uniq -c: 统计每行出现次数 sort : -n 按数字排序 -r 逆序排序 -k1 根据-t的分割,分成几域,取第1个域排序 -t 指定分隔符,默认的分隔符为空白字符和非空白字符之间的空字符 head -n10: 取前10行数据

      作者回复: 赞,总结的很好

      2020-07-01
      7
    • William
      ggrep -Po '[\w\.][\w\.\,\-]*\b' 09.words.txt | sort | uniq -c | sort -nr > 09.cnts.txt 找了一篇infoQ的文章实验,开头可能会以 . 开头,如 .NET;

      作者回复: 赞,一顿操作猛如虎,直接不需要编辑器了。 其它同学要注意下,ggrep 是一个命令。 -o 是只打印匹配上的部分

      2020-07-05
      6
    • 白了少年头
      我的理解是:正则表达式就像是内功,正则在高级语言和编辑器中的用法就像是外功招式,内功和外功要结合起来使用才能成为武林巅峰!

      作者回复: 对的,比喻的很形象

      2020-07-01
      5
    • wenxuan
      直接统计文章单词频次TOP10: grep -Po '\w+' article.txt | sort | uniq -c | sort -nr | head -10

      作者回复: 赞,一顿操作猛如虎啊。

      2020-07-01
      3
    • 134
      匹配正则:([^\s]+\s) 替换为:$1\n

      作者回复: 可以的,这样就得到了一个文本,每行一个单词。 如果要考虑引号里面的看成一个整体,还可以再完善下。

      2020-07-02
      1
    • Bug? Feature!
      学会正则表达式,可以提高我们的工作效率,这个是毋庸置疑的,跟着老师一起打怪升级!

      作者回复: 一起努力!

      2020-11-08
    • Robot
      1、先处理文本为一行一个单词,编辑器为VS code regext: \W*\b([’'\w-]+)\b\W* substitude: $1\n 2、处理文件输出top 10 cat result.txt | sort -fnrk1 | uniq -c | sort -nrk1 | head -n10

      作者回复: 赞,动手练习是好习惯

      2020-07-01
    • Eric@D.F.
      在编辑多行时,如果我们需要编辑的内容都是纵向上同一个位置,就可以使用 Alt (macOS 上是 Option)加上鼠标拖拽的方式来选择(或者尝试按下鼠标中键拖拽) 竖向编辑的时候在windows中是shift+alt+拖动鼠标才可以选中(sublimetext)
      2022-12-13归属地:广东
      1
    收起评论
    大纲
    固定大纲
    编辑器功能
    光标移动和文本选择
    多焦点编辑
    竖向编辑
    在编辑器中使用正则
    内容提取
    内容替换
    内容验证
    内容切割
    总结
    课后思考
    显示
    设置
    留言
    8
    收藏
    21
    沉浸
    阅读
    分享
    手机端
    快捷键
    回顶部