正则表达式与我的朋友Tom
程序员A:“我有一个问题,我不知道如何在庞大的数据表中匹配到我想要的信息?”
程序员B:“用正则表达式啊!”
程序员A:“好吧,那现在我有两个问题了....”
正则表达式?与代数学有关么?这是用在代码中的数学知识么?
正则表达式是用于匹配和替换的利器!
那么匹配和替换又是什么呢?例如我们用过Microsoft Office里的word,对于一篇很长的文档资料,我们要查找里面的某个关键词需要在word查找功能中输入这个关键词,然后会出现这个词,如果看不顺眼,我们还可以替换掉这个词。然而在我们用程序匹配网站上的一些信息时,可没有这现成的工具,这时666,正则表达式就登场了。
Regular expression(正则表达式)的应用非常广泛,如在MySQL中查找相应的信息段,在Python中做网络爬虫爬取页面信息都可以用到。下面做一个Introduction to Regular expression
(表格内容参照文本内容。regex(Regular expression简写)为代码行,检索结果就是检索的结果啦...,#后的内容为注释)
文本:
Tom1, 1Tom2, Tom3, Tom is my friend rather than tom.
Actually, Tom is a dog.
He often drive me crazy \ _ /
Because, He is very lazy zZZ.
1234567, I get another friend whose name is Steven.
.
|
英文的句号,用来匹配任何一个单一的字符
例如:
regex > Tom.
检索结果 > Tom1 Tom2 Tom3 #没有匹配到Tom 因为空格由另外一个字符匹配
regex > .Tom.
检索结果 > 1Tom2
|
[ ]
|
英文的方括号,用来匹配范围
例如:
regex > [Tt]o[Mm]
检索结果 > Tom tom #[Tt]]表示要么匹配T要么t,同理可知[Mm],因此[Tt]o[Mm]就有四个匹配结果:Tom ToM tom toM
regex > Tom[0-9]
检索结果 > Tom1 Tom2 Tom3 #[0-9]表示0到9中的任意一个数,等同于[0123456789], 当然regex也支持字母[a-z]和[A-Z]
|
{ }
|
花括号,用来表示重复的次数
例如:
regex > zZ[2]
检索结果 > zZZ #符号{ }可以设置两个参数,即{m,n}形式,m表示最小重复次数,n表示最大重复次数,若只设置一个参数则要求固定。
|
\
|
转义字符,符号.是匹配任何一个单一的字符意思,如果我们想要匹配文本中的dog.
例如:
regex > dog\.
检索结果 > dog. #符号\的意思即把具有特殊含义的符号意思取消,让其从一个有身份的变为平民(天黑请闭眼,狼人请睁眼...)
regex > \\_/
检索结果 > \_/ #符号\也具有特殊的身份,所以要匹配到\,则需要将其转义(转义就是平民化)
|
\w
|
符号\w可以匹配所有的字母和字符,以及下划线_
例如:
regex > \w\w\w\.
检索结果 > tom. dog. zZZ. ven.
|