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 ...
随机推荐
- Redis简单案例(一) 网站搜索的热搜词
对于一个网站来说,无论是商城网站还是门户网站,搜索框都是有一个比较重要的地位,它的存在可以说是 为了让用户更快.更方便的去找到自己想要的东西.对于经常逛这个网站的用户,当然也会想知道在这里比较“火” ...
- 节省Json流量
今天在实验当中发现了很不错的节省json流量方式,来做个笔记给大家分享一下. 如果跟服务器传递键值对的数组,我们一般会采用下面方式 创建一个字段 public class kv { public st ...
- 你所不知道的linq(二)
上一篇说了from in select的本质,具体参见你所不知道的linq.本篇说下from...in... from... in... select 首先上一段代码,猜猜结果是什么? class P ...
- 设计模式(十三)代理模式(Proxy Pattern)
一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- alias拦截器的使用
在SSH项目中,有时需要由一个Action跳转到另一个Action.有两种方式可以实现Action之间的跳转,一种是chain,另一种是redirectAction,这两种方式之间的区别是chain是 ...
- how to use panda
0.Introduce pandas.read_csv(filepath_or_buffer,sep=', ', dialect=None, compression='infer', doublequ ...
- spring mvc 和spring security配置 web.xml设置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- Jmeter3.0发布,版本更新都更新了什么
Jmeter已发布了3.0,一个大版本的开源测试工具,加入了一些新的特性及软件的改进. Jmeter已隔10年的大版本更新 这是在过去12年里jmeter第一个大版本的更新,jmeter 2.0版本发 ...
- MySQL5.7 error log时间显示问题
最近有两三套环境升级到了5.7.16,发现mysql.err中的时间好像有些问题,经查是mysql 5.7后的变更,如下: root@localhost [(none)]>select now( ...