re模块(正则表达式)

 

一、什么是正则表达式

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

二、正则表达式基础

字符组 : [字符组]

在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 字符分为很多类,比如数字、字母、标点等等。

1 [1]                       匹配1
2 [123]        匹配1、2、3
3 [0-9]       匹配任意一个数字
4 [a-z]       匹配任意一个小写字母
5 [A-Z]       匹配任意一个大写字母
6 [A-Za-z]      匹配任意一个字母

示例如下:

1 print(re.findall('[1]','Zll5201314'))       #['1', '1']
2 print(re.findall('[123]','Zll5201314'))     #['2', '1', '3', '1']
3 print(re.findall('[0-9]','Zll5201314'))     #['5', '2', '0', '1', '3', '1', '4']
4 print(re.findall('[a-z]','Zll5201314'))     #['l', 'l']
5 print(re.findall('[A-Z]','Zll5201314'))     #['Z']
6 print(re.findall('[a-zA-Z]','Zll5201314'))  #['Z', 'l', 'l']
7 print(re.findall('[A-Za-z0-3]','Zll5201314')) #['Z', 'l', 'l', '2', '0', '1', '3', '1']

元字符:

 1 .    匹配除换行符以外的任意字符
 2 \w    匹配字母或者数字或者下划线
 3 \s     匹配任意空白字符
 4 \d     匹配数字
 5 \n     匹配换行符
 6 \t    匹配制表符tab
 7 \b    匹配一个单词的结尾
 8 ^    匹配字符串的开始
 9 $    匹配字符串的结尾
10 \W   匹配非字母或下划线或数字
11 \D   匹配非数字
12 \S   匹配非空白符
13 |    匹配|前或者后的内容
14 ()    匹配括号内的表达式,也表示一个组

示例如下:

 1 print(re.findall('.','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' ', '5', '2', '0']
 2 print(re.findall('\w','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0']
 3 print(re.findall('\s','love_u 520')) #[' ']
 4 print(re.findall('\d','love_u 520')) #['5', '2', '0']
 5 print(re.findall('\n','love_u 520')) #[]
 6 print(re.findall('\b','love_u 520')) #[]
 7 print(re.findall('^l','love_u 520')) #['l']
 8 print(re.findall('520$','love_u 520'))#['520']
 9 print(re.findall('\W','love_u 520')) #[' ']
10 print(re.findall('\D','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' ']
11 print(re.findall('\S','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0']
12 print(re.findall('love|u','love_u 520')) #['love', 'u']

量词:

1 *   重复零次或者多次
2 +  重复1次或者多次
3 ?  重复零次或者一次
4 {n}  重复n次
5 {n,}  重复n次或者更多次
6 {n,m}  重复n到m次

示例如下:

1 print(re.findall('5*','555 5')) #['555', '', '5', '']
2 print(re.findall('5+','555 5')) #['555', '5']
3 print(re.findall('5?','555 5')) #['5', '5', '5', '', '5', '']
4 print(re.findall('5{2,3}','555 5')) #['555']
5 print(re.findall('5{2}','555 5')) #['55']
6 print(re.findall('5{3}','555 5')) #['555']

三、常见的正则表达式应用

1 手机号(国内):^[1-9][3478]\d{9}
2 电话号(国内):[0-9-()()]{7,18}
3 邮编:\d{6}
4 QQ:[1-9]([0-9]{5,11})
5 身份证号:\d{17}[\d|x]|\d{15}
6 邮箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
7 网址:^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+
8 日期:\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}
9 用户名:[A-Za-z0-9_\-\u4e00-\u9fa5]+

#正则表达式在线测试网址“http://tool.chinaz.com/regex/”

四、python中如何使用正则表达式

findall()方法:

此方法是在整个字符串中匹配指定字符或者字符串,并且将所有满足条件的结果返回到一个列表中,如下:

1 ret = re.findall('a','abac')
2 print(ret)  #['a', 'a']
3 ret = re.findall('ab','abac') 4 print(ret)  #['ab']

search()方法:

此方法是在整个字符串中查找满足匹配条件的字符或者字符串,一旦找到一个就不再继续查找,并返回包含查找值的对象,可以用.group()方法进行查看,如下:

1 ret = re.search('a','abac')
2 print(ret.group())  #a

match()方法:

此方法是用来从开头位置查找是否满足匹配条件,如果没有就会返回None,如果有,则会返回一个包含查找值的对象,可以用group()方法进行查看,如下:

1 ret = re.match('a','abac')
2 print(ret.group())  #a
3
4 ret = re.match('b','abac')
5 print(ret)  #None

split()方法:

此方法用来对一个字符串进行切分,如下:

1 ret = re.split('[ab]', 'abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
2 print(ret)  # ['', '', 'cd']

sub()以及subn()方法:

1 ret = re.sub('\d', '*', 'a1b2c3')#将数字替换成'*',默认替换所有的数字
2 print(ret) #a*b*c*
3
4 ret = re.sub('\d', '*', 'a1b2c3', 1)#将数字替换成'*',参数1表示只替换1个
5 print(ret) #a*b2c3
6
7 ret = re.subn('\d', '*', 'a1b2c3')#将数字替换成'*',返回一个元祖(替换后的字符串,替换的次数)
8 print(ret) #('a*b*c*', 3)

compile()方法:

此方法是先把正则表达式编译好,以方便多次使用,如下:

1 obj = re.compile('\d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
2 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
3 print(ret.group())  #结果 : 123
finditer()方法:
此方法与findall类似,只不过返回的不是一个列表,而是一个生产器,可以用next(iter).group()来查看里面的值,如下:
1 ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
2 print(ret)  # <callable_iterator object at 0x10195f940>
3 print(next(ret).group())  #查看第一个结果
4 print(next(ret).group())  #查看第二个结果
5 print([i.group() for i in ret])  #查看剩余的左右结果

re 模块 正则表达式的更多相关文章

  1. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  2. 【Python开发】Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...

  3. sys,os,模块-正则表达式

    # *__conding:utf-8__* """"我是注释""" sys,os模块 import sysimport os pr ...

  4. Python之re模块 —— 正则表达式操作

    这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...

  5. Python re模块 正则表达式

    1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  6. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  7. Python3 re模块(正则表达式)

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过r ...

  8. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

  9. re模块 - 正则表达式 疏理(一)

    在网上总是很难找到令自己比较满意的,关于正则表达式的文章.所以决定自己来总结一波,并配上相应的示例. 正则表达式:定义了规则,用来字符串处理. 用途: 1.匹配 - 符合规则的字符串,则认为匹配了. ...

随机推荐

  1. Java Web Session设置

    一.前言 在做 java web项目时,我们很多时候都要用到 Session,那么我就简单的写一下 Session 的写法. 二.代码实现 Servlet Session 的设置 package co ...

  2. 用于文件系统的C库函数

    9/20/2017 学<LINUX C编程实战>中 1.打开 File *fopen(const char *path , const char * mode); fopen实现打开指定的 ...

  3. JS如何实现导航栏的智能浮动

    <script language="javascript">     function smartFloat(obj) {         var obj = docu ...

  4. Python 项目实践三(Web应用程序)第一篇

    一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样.Python提供了一组开发Web应用程序的卓越工具.在本章中,你将学习如何使用D ...

  5. ORACLE的锁机制

    数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加锁是实现数据 ...

  6. 基于阿里云的JavaEE系统框架介绍

    基于阿里云的系统框架展望 1) CDN 用于缓存静态文件等等.七牛和阿里的都还可以. 七牛要做的久一点,各种图片处理的接口要完善一些 阿里的CDN要稍微好一点点,但是没有不安全的访问方式,访问稍微没有 ...

  7. sql sever分组查询和连接查询

    分组查询select 查询信息 from 表名where 条件group by 按照列分组(可多个 ,隔开)order by 排序方式(查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就 ...

  8. Python并发实践_02_通过yield实现协程

    python中实现并发的方式有很多种,通过多进程并发可以真正利用多核资源,而多线程并发则实现了进程内资源的共享,然而Python中由于GIL的存在,多线程是没有办法真正实现多核资源的. 对于计算密集型 ...

  9. Looping over the databases on a server

    SP_MSFOREACHDB 获得所有实例下数据库名称 EXEC sp_MSForEachDB 'PRINT "?"'   sp_MSforeachtable   USE MAST ...

  10. 浅谈JavaScript的面向对象程序设计(二)

    前面介绍通过Object构造函数或者字面量创建单个对象,但是通过这个的方法创建对象有明显的缺点:调用同一个接口创建多个实例,会产生大量的重复代码.怎么样解决? 工厂模式 工厂模式是软件工程领域经常使用 ...