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 ...
随机推荐
- putty无密码登陆
1.打开puttygen.exe,点击Generate,然后按照说明用鼠标在空白处移动,生成密钥对. 2.保存私钥,不填passphrase.同时保存公钥,并打开公钥文件,将回车符去掉. 3.将公 ...
- AngularJS Resource:与 RESTful API 交互
REST(表征性状态传输,Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格.RESTful风格的设计不仅 ...
- 现代3D图形编程学习-基础简介(1) (译)
本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...
- [SQL Server] 特殊字符、上标、下标处理
今天遇到一个问题是往 SQL Server 中导入像m².m³这样的单位数据,可是在 SQL Server 中查看到的都是 m2.m3,于是在网上查了一下资料,顺便摘录下来供日后查阅. 一 Wind ...
- C#多态“说来也说”——逻辑层BLL中的多态使用
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/5861842.html 昨天晚上,有个朋友说学了好久,依然没搞 ...
- 在docker容器中vi指令找不到
在使用docker容器时,有时候里边没有安装vi,敲vi命令时提示说:vi: command not found,这个时候就需要安装vi,可是当你敲apt-get install vi命令时,提示: ...
- CodeSmith7 系列 破解教程
CodeSmith[点此下载] 学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是 ...
- C#模拟HTTP Form请求上传文件
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO ...
- C#中日期和时间相加的方法
可能对于初入此行业人来说有些困惑,实现起来有一丝复杂. 比如说时间是:2016-08-05 14:46:30,中间过了56秒钟.要求得出56秒之后的时间格式是:年月日时分秒 下面介绍最简单的办法, m ...
- mysqld: Out of memory 解决办法(mysql)
自己配置的XWAMP环境,默认下没有详细配置mysql的my.ini,一方面不同服务器的配置不一样,另一方面按照默认为空的方式也一直没有出现过问题.不过最近服务器挂掉了,出现的症状是: 网站不能打开, ...