正则表达式入门

上一篇 / 下一篇  2016-02-18 16:12:50 / 天气: 晴朗 / 心情: 平静 / 个人分类:general

初次接触正则表达式已经是很久之前学习shell熟悉sed和awk的时候了,这次学习python又遇到发现印象不是那么清晰了,这边作个基础知识点总结,方便以后查阅。


正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。--来自百度百科

通俗得讲,正则表达式就是定义规则,符合这个规则的字符串都可以被匹配进一步作替换删除等操作。主流的开发或脚本语言如java,javascript,python的re模块,linux的grep,sed等对正则都有很好的支持。


表示字符串本身的:
[]表示字符范围,如[0-9a-zA-Z]表示任意一个字母或数字,[1,a,B]表示1,a,B中的任意一个字符
.表示任意一个字符,如xml.可以匹配xml1,xml@等
^表示行首,如^@表示以@开头的字符串,如^[0-9]表示必须以数字开头
$表示行尾,如[0-9]$表示以数字结尾的字符串,如。$表示必须以句号结束
\d表示数字,是[0-9]的简写
\w表示字母,是[0-9a-zA-Z]的简写,数字也是广义的字符
\s表示空格,包含Tab等空白符

ps:具体的字符可以直接写,有特殊含义的字符需要转义,如0\.[0-9]表示小于1的一位小数,如0.9,0.1

表示字符个数的:
*表示对它前面字符的任意次循环(包含0次),如.*表示任意字符串(包含空串),10*可以匹配1,10,100等,[a-z]*可以匹配空串以及任意个小写字母的字符串
+表示对它前面字符的至少一次循环,如a+可以匹配a,aa等
?表示对它前面字符的0到1次循环,如[0-9]?表示空或者个位数
{n}表示对它前面字符的n次循环,如go{2}可以匹配good字符串
{n,}表示对它前面字符的至少n次循环
{n,m}表示对它前面字符的n到m次循环

ps:可以看出*,+和?是特定{}的简写,*等价于{0,},+等价于{1,},?等价于{0,1}


正则有很多强大有复杂的功能,如反选功能,^[^0-9]表示不以数字开头的字符串,需要的时候再去查阅了!

python运用正则表达式校验邮箱格式
(假设合法邮箱A@B.C的规则是A由数字,字母和中线下划线组成且不以中线下划线开头,B由数字字母组成,C由字母组成;这边说假设是因为我不确信这个规则就一定对,只是用来做实例,规则不必太纠结)

#!/usr/bin/env python3
#coding:utf-8
import re

def verifyEmail(e):
    #re.match方法匹配正确返回match对象,否则返回None
    if re.match(r'^[a-zA-Z0-9][a-zA-Z0-9\-\_]+\@[a-zA-Z0-9]+\.[a-zA-Z]{1,}$', e):
            return '邮箱格式合法'
    return '邮箱格式非法'    

if __name__ == '__main__':
    print('请输入email地址:')
    emailA = input()
    print(verifyEmail(emailA))




TAG:

 

评分:0

我来说两句

Open Toolbar