我们在计算机学习的过程中总是会时不时的遇到正则表达式,很多人觉得太复杂,或者说要用的时候就上网看看博客,过一阵就忘记了。本篇博客会学习讨论正则表达式到底如何使用
正则表达式,是用来识别正则字符串的,在大量的文本中我写好正则表达式,满足我的要求的字符串就会返回,不满足的就会被忽略。骚扰电话的过滤,前缀字符串的查找等基本上任何形式的字符串都可以用正则来表达。
如:1.a字符出现至少一次
2.b跟在a的后面,有5个
3.在后跟着偶数个c
4.最后出现d或者e
满足以上的字符串可以为:abbbbbcccce,aaabbbbbccd
他的正则为:aa*bbbbb(cc)*(d|e)
逐个分析
1.aa*
a*表示a字符出现任意次数,包括0次。aa*就是a字符出现任意次,至少一次
2.5个b,我们直接打5个b就行
3.(cc)* 表示(cc)这一组出现任意次,这样一来c出不出现都是偶数
4.(d|e)最后跟的就是d或者e,保证结尾是这两者中的一个。
按照初学的来讲,每个字符应该加上中括号,更加便于我们理解。下面表格是python中常用的正则符号。
符号 | 含义 | 例子 | 匹配结果 |
---|---|---|---|
* | 前面字符串出现任意多次 | a* b* | aa,aab,abb |
+ | 匹配前面的字符串至少一次 | a+b+ | aaabb,aab |
[ ] | 匹配一次括号中字符 | [a-z]* | 任意小写单词,apple,cat,dog都行 |
() | 编组 | (cc)* | cc,cccc |
{m,n} | 匹配前面字符串m-n次 | a{1,2}b{3,4} | abbb,aabbbb |
[^] | 匹配一个不在括号中的 | a[^a-z]b | aAb,aYb,a&b |
. | 表示任意字符(括号,字母,数字,空格等) | a.b | akb,alb |
^ | 以什么开头的字符串 | ^h | hello,hollow |
\ | 转义字符 | ||
$ | 表示以什么结尾的字符串 | [A-Z]*[a-z]& | SAa,DDFb |
?! | 表示不包含,加上^与$,就是整个字符串中不出现 | ^((?![A-Z]).)*$ | 整个字符串中没有大写字母 |
下面我们训练一下,假设我们在一段文本中查找邮箱。邮箱的组成:
1.大小写字母,数字,_,+,==.==这几种,长度不知,但是以上字符至少出现一次。[A-Za-z0-9\.+_]+
2.一个@,这个符号只能出现一次,@
3.然后包含若干个字母,至少出现一次。[A-Za-z]+
4.一个点. \.
(注意要用转义)
5.最后就是域名,假设有(com,top,cn)这三种。(com|top|cn)
组合起来:[A-Za-z0-9\.+_]+@[A-Za-z]+\.(com|top|cn)
给大家推荐一个网址,用来检验自己的正则写对了没有:
http://reg.1zdz.cn/
检查一下我们的正则,发现是可以的(高亮就是匹配成功了)