引自:正则表达式是什么? - 知乎
中“龙吟九野”所写的一个回答,个人感觉看完之后如同醍醐灌顶,查了很多资料都没有这篇文章写的基础和通透,感觉是正则表达式扫盲好文,所以搬运一下,侵权删,感谢
a
作者:龙吟九野
链接:https://www.zhihu.com/question/19676915/answer/171365948
来源:知乎
a
a
a
a
a
文本,乃天下之大宗。自网络出现以来,文本信息指数爆炸式增长,乃至于各种文字泛滥于天下,自此,江湖皆是修文之人。如果你恰好也是其中之一,那可以来学习学习……怎么处理一些文字信息。不是用Word排版,也不是拿Excel统计单词。而是——找信息。
想象一下,假如你不知道网页是用什么鸟HTML写出来的。你打开了知乎页面,在你的面前都是文字、小图片:
然后老板过来:哦?你也看知乎?小鱼啊,把今天推荐的这些话题、对应的标题都复制下来做个目录?你会怎么办?当然是骂娘啦。都不会程序什么的,只好一个个复制、粘贴咯。别急着骂娘。假设你不知道document.getElementByXX这些鸟玩意儿,那我们就把这些当做文本来处理。全选页面,复制,粘贴到我们的编辑器Sublime Text中。
仔细观察一下,这些文本是不是有规律?
好了,课程开始了。
(1)但凡文字是有规律的,我们都会这么描述:我要一段都是字母的。我要一段都是数字的。
(2)或者你的邮箱会是被这么描述的:文字或者数字(可出现多次)@某个网站.com
看吧……其实你本来就会“正则表达式”,只是你不说而已。
正则表达式就是名字看起来比较高大上,其实就是……我要啥啥啥类型的文本,你给我瞅瞅有没有呗?
a
a
a
a
a
比如说,我要10个数字的。
你就跟电脑说:
digital x 10
当然,这样写的话……有可能人家是以为这样:
所以要用点特殊的符号来表示刚才的话。比如数字digital缩写为
\d
没错,是带着斜杆的d,没有了斜杆,软件就以为你是要找“d”的字母了。我们把斜杆称为:魔法·转义字符。
对应的,字母word可以表示为
\w
如果要表示任意字符呢?(任意字符就包括了任何你看得到的字符和看不到的字符)
那就用点号
.
↑这个点号有点小。仔细观察应该看得到。
那我想找到文本中的手机号码呢?怎么描述?
我就会说:数字,长度固定为11个的。
那么就是:
\d{11}
对,后面的花括号里面包裹的是次数。
看看效果?
那如果说是任意长度呢?那就用:
*
↑对,就是星号。
所以也可以试试任意长度的数字:
现在,知道怎么提取想要的知乎内容了吧?
没错,咱们就规定以“来自话题”为开头,然后匹配到下一行的任意内容(反正经过观察,这就是想要的标题行了)
如果要匹配新的行,要记得用上换行符号\n。
好了,开始:
来自话题:.*\n.*
↑表示以来自话题:为开头,然后匹配话题内容(任意字符都行)
再然后是换到新的一行,又匹配了任意的内容(这是标题)
效果是?
点击“全查”,即可选中所有同类型的文字。
然后复制,粘贴。
当然,现在面对的是小网页,文本不多,可能看不出什么优势。
但如果是一本小说那么长的报表呢?
想了解更多的正则表达式……就百度去吧。本咸鱼要洗白白了
~\(OvO)/~
↑这也是个正则表达式。
PS:之所以以Sublime Text作为文本编辑器示范是因为它的搜索功能支持正则表达式。
其他文本编辑器就看你的喜好了。反正我就喜欢用这个处理大量文字,故安利一波。