re模块

re模块使用python拥有全部的正则表达式功能

1
2
3
4
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法) 
re.M(MULTILINE):(多行模式,改变“^”,"$"的行为) 
re.S(DOTALL):(点任意匹配模式,改变"." 的行为) 
re.X(VERBOSE):详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

re.complit

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换
格式:re.match(pattern,string,flags=0) #pattern: 正则模型, string:要匹配的字符串  falgs:匹配模式

a = re.complit(r"\d*", re.I)
b = a.match("ABCde")

re.match

re.match 函数尝试从字符串的其实位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none

print(re.match('com','comwww.runcomoob').group())
print(re.match('com','Comwww.runcomoob',re.I).group())
执行结果:
com
com

re.seach

re.search(pattern,string,flags=0)
re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None

print(re.search('\dcom','www.4comrunoob.5com').group())
执行结果:
4com

*注:match 和search一旦匹配成功,就是一个match object对象,而match object 对象有以下方法:

·group()返回被RE匹配的字符串
·start()返回匹配开始的位置
·end()返回匹配结束的位置
·span()返回一个元组包含匹配(开始,结束)的位置
·group()返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串
a. group()返回re整体匹配的字符串,
b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。
   import re
   a = "123abc456"
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)) #123abc456,返回整体
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)) #123
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)) #abc
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)) #456
u= "http://k.autohome.com.cn/325/quality/02#pvareaid=#2073101"
import re
print re.search("\d{2}(?=#)",u).group() >> 02
 

###group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。###

re.findall

re.findall 遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表 格式:
re.findall(pattern,string,flags=0)

    p = re.compile(r'\d+')
print(p.findall('o1n2m3k4'))
执行如果如下:
['1','2','3','4']
import re
tt = "Tina is a good girl , she is cool ,clever, and so on ..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt))
print(re.findall(r'(\w)*oo(\w)'tt))
执行结果如下
['good','cool']
[('g','d'),('c','l')]

re.finditer

finditer()
搜索string,返回一个顺序访问每一个匹配结果(match对象)的迭代器。找到RE匹配的所以子串,并把他们昨晚一个迭代器返回
格式:re.finditer(pattern,string,flags=0)

返回的其实也是一个列表。

re.split

split()
安装能够匹配的字符串将string分割后返回列表
可以使用re.split来分割字符串,如:re.split(r'\s+',text);将字符串按空格分割成一个单词列表
格式:re.split(pattern,string[,maxsplit])

print(re.split('\d+','one1two2three3four4five5'))
执行结果如下:
['one','two','three','four','five']

re.sub

sub()
使用re替换string中每一个匹配的子串后返回替换后的字符串
格式:re.sub(pattern,repl,string,count)

import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))
执行结果如下:
JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...
其中第二个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表示每个匹配项都替换。

subn()
返回替换次数
格式:
subn(pattern,repl,string,count=0,flags=0)

print(re.subn('[1-2]','A','123456abcdef'))
print(re.sub("g.t","have",'I get A, I got B ,I gut C'))
print(re.subn("g.t","have",'I get A, I got B ,I gut C'))
执行结果如下:
('AA3456abcdef', 2)
I have A, I have B ,I have C ('I have A, I have B ,I have C', 3)

区别

1、re.match与re.search 与re.findall 的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
而re.search匹配整个字符串,直到找到一个匹配

    a=re.search('[\d]',"abc33").group()
print(a)
p=re.match('[\d]',"abc33")
print(p)
b=re.findall('[\d]',"abc33")
print(b)
执行结果:
3
None
['3', '3']

2、贪婪匹配与非贪婪匹配
*?,+?,??,{m,n}?    前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

    a = re.findall(r"a(\d+?)",'a23b')
print(a)
b = re.findall(r"a(\d+)",'a23b')
print(b)
执行结果:
['2']
['23']

3、参数flags应用注意
print(re.split('a','1A1a2A3',re.I))

上述输出结果并未能区分大小写,而仅仅是以字母a为分割(结果为列表['1A1', '2A3'])
这是因为re.split(pattern,string,maxsplit,flags)默认是四个参数,当我们传入的三个参数的时候,系统会默认re.I是第三个参数,所以就没起作用。如果想让这里的re.I起作用,写成flags=re.I即可。

正确写法应该是print(re.split('a','1A1a2A3',flags=re.I)) 就能根据A与a 两个字母来分割,得到的结果是['1', '1', '2', '3']

python re模块详解的更多相关文章

  1. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  2. python docopt模块详解

    python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...

  3. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  4. python pathlib模块详解

    python pathlib模块详解    

  5. Python Fabric模块详解

    Python Fabric模块详解 什么是Fabric? 简单介绍一下: ​ Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...

  6. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  7. python常用模块详解

    python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...

  8. python os模块详解

    一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...

  9. Python ZipFile模块详解(转)

    Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...

  10. python常用模块详解(一)

    一.简介 模块是一个保存了Python代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码 模块分为三种: 自定义模块 内置标准模块 开源模块(第三方) 自定义模块: 模块导入 impor ...

随机推荐

  1. python3基础01(常见语法基础汇总)

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 换行\n 续行\ s[:i] + s[i:] 等于 s#转义 \e 空 \000 八进制 \oyy 十六进制 ...

  2. python 学习实例(cmdMD链接)

    实例1:大学网络排名爬取 https://www.zybuluo.com/myles/note/714347

  3. java Vamei快速教程20 GUI

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! GUI(Graphical User Interface)提供了图形化的界面,允许 ...

  4. ABAP和Hybris的源代码生成工具

    ABAP 有两种方式,一种是ABAP Code Composer, 细节可以查看我的博客Step by Step to generate ABAP code automatically using C ...

  5. 【洛谷2633】Count on a tree(树上主席树)

    点此看题面 大致题意: 给你一棵树,每次问你两点之间第\(k\)小的点权,强制在线. 主席树 这种题目强制在线一般就是数据结构了. 而看到区间第\(k\)小,很容易就能想到主席树. 至少不会有人想到树 ...

  6. Problem I: Satellite Photographs

    Problem I: Satellite Photographs Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 208  Solved: 118 [S ...

  7. 【Java-JVM】定量分析解决OutOfMemoryError: PermGen space, 来看科学量化分析

    网络上搜集,有操作有分析. 一.问题 在部署大型的 Java Web项目的时候,或者在 MyEclipse 中进行调试的时候经常出现: OutOfMemoryError: PermGen space ...

  8. 阿里云服务器下安装LAMP环境(CentOS Linux 6.3)(1)

    阿里的云服务器准备好以后,我们首先要做的就是把自己购买的磁盘空间挂载到系统里面,我们为服务器选择的是 Linux 系统,确切说的是 CentOS 系统. 默认阿里云服务器带了一个 20G 的空间,一般 ...

  9. Bootstrap 历练实例 - 折叠(Collapse)插件事件

    事件 下表列出了折叠(Collapse)插件中要用到的事件.这些事件可在函数中当钩子使用. 事件 描述 实例 show.bs.collapse 在调用 show 方法后触发该事件. $('#ident ...

  10. 关于html标签的两种隐藏方式

    做一个文章管理模块 有一个功能是需要根据文章分类来显示内容的标签 刚开始以为很简单 ,手放键盘上就是一顿敲. 如果类型是文章就是没问题  可是另外几种就有问题了 红框的标签一直不出来 后来找了半天然来 ...