Re 模块
re模块提供方法如compile, search, findall, match和其他的方法。这些函数是使用REGEX语法建立了一个模式来处理文本的。
第一个方法:search.
一个基本的搜索工作原理是这样的:
>>> import re
>>> mo = re.search(“hello”,”Hello world, hello Python!”)
re模块中的search需要将第一个参数作为第二个参数的模式。上面那个“hello”是第一个参数,也是一个模式,”Hello world, hello Python!”是第二个参数,是要匹配的字符串。在这种情况下,该模式可以被翻译为“h随后由ello组成”。当找到一个匹配,这个函数返回匹配的对象(在这里,被称为mo)与第一个匹配的信息。如果没有匹配,返回None。这里可以通过显示的方法查询匹配对象:
>>> mo.group() #group()返回REGEX(也即是“hello”这个模式)匹配的字符串,“hello”模式匹配hello,所以用group()会返回匹配的结果,也就是hello
’hello’
>>> mo.span() #span()返回一个包含匹配的(起点,终点)位置元组。
(13, 18)
而用mo.start()和mo.end()分别返回起点和重点:
>>> mo.start()
13
>>> mo.end()
18
当模式未匹配到结果时,会返回None,例如:
>>> mo = re.search("hhello","Hello world,hello python")
>>> print (mo)
None
如果我们想匹配同时匹配“Hello”和“hello”:
>>> import re
>>> mo = re.search(“[Hh]ello”,”Hello world, hello Python!”)
第一个匹配返回:
>>> mo.group()
’Hello’
但是用search好像匹配到一个结果就停止啦,需要用到findall。
第二个方法:findall。
为了找到所有的匹配,而不仅仅是第一个,用findall:
>>> re.findall(“[Hh]ello”,”Hello world, hello Python,!”)
[’Hello’, ’hello’] #这里findall会将所有的匹配结果以列表的形式返回,而不是像search那样返回的是一个匹配对象。
这里findall返回实际匹配的列表,而不是匹配对象。
search和findall的区别如下:
>>> mo1 = re.findall("[Hh]ello","Hello world, hello Python!")
>>> mo1
['Hello', 'hello']
findall会将匹配的所有结果作为“列表”返回,这里赋给mo1,所以mo1是所有匹配结果的列表。
>>> mo2 = re.search("[Hh]ello","Hello world,hello python")
>>> mo2
<_sre.SRE_Match object; span=(0, 5), match='Hello'>
>>> mo2.group()
'Hello'
但是search返回的只是一个match对象,就想上面mo2的值。要想将match的结果显示出来,就需要用group()。
re.finditer
如果我们希望返回每一个匹配的匹配对象,用finditer方法。作为一个额外的奖励,它不会返回一个列表,而是一个迭代器。这意味着,每次finditer的调用,它返回它们的下一个元素而无需一次计算得到。对任何的迭代,可以优化内存的使用:
>>> re.finditer(“[Hh]ello”,”Hello world, hello Python,!”)
<callable-iterator object at 0xb6f43d8c>
遍历这些结果:
>>> mos = re.finditer(“[Hh]ello”,”Hello world, hello Python,!”)
>>> for x in mos:
print (x.group())
结果是:
Hello
hello
第三个方法:match。
match方法和search一样,可是它只是匹配字符串的开始。当没有模式被找到,它返回None。
>>> mo = re.match(“hello”, “Hello world, hello Python!”)
>>> print mo
None
和search一样,当模式没有找到,它返回None。
>>> mo = re.match(“Hello”, “Hello world, hello Python!”)
>>> mo
<_sre.SRE_Match object at 0xb7b5eb80> #match同search类似,返回的也是一个配对对象,而不是像findall那样返回的是匹配的结果列表。
匹配对象可以被查询得到:
>>> mo.group()
’Hello’
>>> mo.span()
(0, 5)
Re 模块的更多相关文章
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- Python标准模块--ContextManager
1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...
- Python标准模块--Unicode
1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...
- Python标准模块--Iterators和Generators
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...
- 自己实现一个javascript事件模块
nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...
- 理解nodejs模块的scope
描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...
- nodejs模块发布及命令行程序开发
前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...
- 开始学nodejs——net模块
net模块的组成部分 详见 http://nodejs.cn/api/net.html 下面整理出了整个net模块的知识结构,和各个事件.方法.属性的用法 net.Server类 net.Socket ...
随机推荐
- JS处理事件小技巧
今天,就分享一下我自己总结的一些JS的小技巧: ①防止鼠标选中事件 <div class="mask" onselectstart="return false&qu ...
- Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考
写在前面: 1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补丁中附带的readme. 2.Oracle每季度都会更新一个最新的PSU,本文最新指的是当前最新 ...
- 1元搭建自己的云服务器&解析域名
最近在学做微信开发,没有自己的域名和服务器就不得不寄人篱下,索性自己就到云主机上搭建了个服务器,但是水平有限弄了一个下午~~有自己的域名和服务器的好处相信不用我多说了.比如日后可以有自己域名的个性博客 ...
- 怎样写一个webpack loader
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- scikit-learn一般实例之七:使用多输出评估器进行人脸完成
本例将展示使用多输出评估期来实现图像完成.目标是根据给出的上半部分人脸预测人脸的下半部分. 第一列展示的是真实的人脸,接下来的列分别展示了随机森林,K近邻,线性回归和岭回归对人脸下半部分的预测. # ...
- CSS布局 - 三栏布局
CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...
- Linux下安装Redis
1. 下载最新版本的Redis源代码: 命令:wget http://download.redis.io/redis-stable.tar.gz 2. 解压并编译 命令:tar xzf redis-s ...
- 《Web开发过滤Javascript、HTML的方法》
JavaScript过滤方法: 第一种方案:使用 htmlspecialchars 函数转换特殊字符和使用 nl2br 函数插入一些必要的 <br /> 标签. $comment = &l ...
- IIS初始化(预加载),解决第一次访问慢,程序池被回收问题
你以为你可以慢,那是不可能的!你以为你可以不动,那也是不可能的! 河南是守株待兔故事情节的发源地,讲的是懒惰的农夫坐在树桩旁等待可爱的小毛兔撞树的故事,那么这种事情怎么可能天天出现呢!你以为的事并一定 ...
- CSS3鼠标滑过动画线条边框特效
基于CSS属性animation动画制作,效果流畅弹性十足 效果展示 http://hovertree.com/texiao/css3/32/ 源码下载:http://hovertree.com/h/ ...