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 模块的更多相关文章

  1. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  4. Python标准模块--ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  5. Python标准模块--Unicode

    1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...

  6. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

  7. 自己实现一个javascript事件模块

    nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...

  8. 理解nodejs模块的scope

    描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...

  9. nodejs模块发布及命令行程序开发

    前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...

  10. 开始学nodejs——net模块

    net模块的组成部分 详见 http://nodejs.cn/api/net.html 下面整理出了整个net模块的知识结构,和各个事件.方法.属性的用法 net.Server类 net.Socket ...

随机推荐

  1. android 通讯录实现

    最近项目需要,于是自己实现了一个带导航栏的通讯录,上代码! 一.数据准备 (1)bean: public class Friend { private String remark; private S ...

  2. webService学习之路(二):springMVC集成CXF快速发布webService

    继上一篇webService入门之后,http://www.cnblogs.com/xiaochangwei/p/4969448.html ,现在我将我周六在家研究的结果公布出来 本次集成是基于之前已 ...

  3. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  4. 未能加载文件或程序集“Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5”或它的某一个依赖项。系统找不到指定的文件。

    在创建ASP.NET MVC项目过程中发生了这个异常 未能加载文件或程序集"Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0 ...

  5. KMP算法

    KMP算法是字符串模式匹配当中最经典的算法,原来大二学数据结构的有讲,但是当时只是记住了原理,但不知道代码实现,今天终于是完成了KMP的代码实现.原理KMP的原理其实很简单,给定一个字符串和一个模式串 ...

  6. JVM调优总结

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...

  7. 配置rsync服务,数据同步。

    这部分设计服务器端和客户端. [服务器端] 如果服务器没有安装rsync服务则使用yum安装rsync服务. yum install rsync 然后 vim /etc/xinetd.d/rsync ...

  8. JS高程5.引用类型(3)Array类型-检测数组

    1. instanceof操作符(ECMAScript3) 对于一个网页,或者是一个全局作用域而言,使用instanceof操作符来检测数组就可以得到满意的结果. 语法:if(value instan ...

  9. JS函数声明的问题

    三个例子 var a = 10; 2 function test(){ 3 a = 100; 4 console.log(a); 5 console.log(this.a); 6 var a; 7 c ...

  10. 移动端web开发——视口

    本篇主要是记录一下移动端视口的分类说明和其它的一些知识.在开始之前,先看一个典型的例子: <meta name="viewport" content="width= ...