python正则表达式操作指南_第二篇详细Python正则表达式操作指南(re使用)

接下来昨天的内容

执行匹配

一旦你有了已经编译了的正则表达式的对象,你要用它做什么呢?`RegexObject` 实例有一些方法和属性。这里只显示了最重要的几个,如果要看完整的列表请查阅 Python Library Reference

如果没有匹配到的话,match() 和 search() 将返回 None。如果成功的话,就会返回一个 `MatchObject` 实例,其中有这次匹配的信息:它是从哪里开始和结束,它所匹配的子串等等。

你可以用采用人机对话并用 re 模块实验的方式来学习它。如果你有 Tkinter 的话,你也许可以考虑参考一下 Tools/scripts/redemo.py,一个包含在 Python 发行版里的示范程序。

首先,运行 Python 解释器,导入 re 模块并编译一个 RE:

现在,你可以试着用

RE 的 [a-z]+ 去匹配不同的字符串。一个空字符串将根本不能匹配,因为 + 的意思是 “一个或更多的重复次数”。 在这种情况下

match() 将返回 None,因为它使解释器没有输出。你可以明确地打印出 match() 的结果来弄清这一点。

现在,让我们试着用它来匹配一个字符串,如 "tempo"。这时,match() 将返回一个 MatchObject。因此你可以将结果保存在变量里以便后面使用。

现在你可以查询 `MatchObject` 关于匹配字符串的相关信息了。MatchObject 实例也有几个方法和属性;最重要的那些如下所示:

试试这些方法不久就会清楚它们的作用了:

group()

返回 RE 匹配的子串。start() 和 end() 返回匹配开始和结束时的索引。span()

则用单个元组把开始和结束时的索引一起返回。因为匹配方法检查到如果 RE 在字符串开始处开始匹配,那么 start() 将总是为零。然而,

`RegexObject` 实例的 search 方法扫描下面的字符串的话,在这种情况下,匹配开始的位置就也许不是零了。

在实际程序中,最常见的作法是将 `MatchObject` 保存在一个变量里,然后检查它是否为 None,通常如下所示:

findall() 在它返回结果时不得不创建一个列表。在 Python 2.2中,也可以用 finditer() 方法。

模块级函数

你不一定要产生一个

`RegexObject` 对象然後再调用它的方法;re 模块也提供了顶级函数调用如 match()、search()、sub()

等等。这些函数使用 RE 字符串作为第一个参数,而後面的参数则与相应 `RegexObject` 的方法参数相同,返回则要么是 None

要么就是一个 `MatchObject` 的实例。

Under the hood, 这些函数简单地产生一个 RegexOject 并在其上调用相应的方法。它们也在缓存里保存编译後的对象,因此在将来调用用到相同 RE 时就会更快。

你将使用这些模块级函数,还是先得到一个

`RegexObject` 再调用它的方法呢?如何选择依赖于怎样用 RE 更有效率以及你个人编码风格。如果一个 RE

在代码中只做用一次的话,那么模块级函数也许更方便。如果程序包含很多的正则表达式,或在多处复用同一个的话,那么将全部定义放在一起,在一段代码中提前编译所有的

REs 更有用。从标准库中看一个例子,这是从 xmllib.py 文件中提取出来的:

我通常更喜欢使用编译对象,甚至它只用一次,but few people will be as much of a purist about this as I am。编译标志

编译标志让你可以修改正则表达式的一些运行方式。在

re 模块中标志可以使用两个名字,一个是全名如 IGNORECASE,一个是缩写,一字母形式如 I。(如果你熟悉 Perl

的模式修改,一字母形式使用同样的字母;例如 re.VERBOSE的缩写形式是 re.X。)多个标志可以通过按位 OR-ing 它们来指定。如

re.I | re.M 被设置成 I 和 M 标志:

这有个可用标志表,对每个标志後面都有详细的说明。

IGNORECASE

使匹配对大小写不敏感;字符类和字符串匹配字母时忽略大小写。举个例子,[A-Z]也可以匹配小写字母,Spam 可以匹配 "Spam", "spam", 或 "spAM"。这个小写字母并不考虑当前位置。

L

LOCALE

影响 "w, "W, "b, 和 "B,这取决于当前的本地化设置。

locales

是 C 语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。举个例子,如果你正在处理法文文本,你想用 "w+ 来匹配文字,但 "w

只匹配字符类 [A-Za-z];它并不能匹配 "é" 或 "ç"。如果你的系统配置适当且本地化设置为法语,那么内部的 C 函数将告诉程序 "é"

也应该被认为是一个字母。当在编译正则表达式时使用 LOCALE 标志会得到用这些 C 函数来处理 "w

後的编译对象;这会更慢,但也会象你希望的那样可以用 "w+ 来匹配法文文本。

M

MULTILINE

(此时 ^ 和 $ 不会被解释; 它们将在 4.1 节被介绍.)

使用 "^" 只匹配字符串的开始,而 $ 则只匹配字符串的结尾和直接在换行前(如果有的话)的字符串结尾。当本标志指定後, "^" 匹配字符串的开始和字符串中每行的开始。同样的, $ 元字符匹配字符串结尾和字符串中每行的结尾(直接在每个换行之前)。

S

DOTALL

使 "." 特殊字符完全匹配任何字符,包括换行;没有这个标志, "." 匹配除了换行外的任何字符。

X

VERBOSE

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在

RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之後;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入

RE,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之後。

举个例子,这里有一个使用 re.VERBOSE 的 RE;看看读它轻松了多少?

在上面的例子里,Python 的字符串自动连接可以用来将 RE 分成更小的部分,但它比用 re.VERBOSE 标志时更难懂。

更多模式功能

到目前为止,我们只展示了正则表达式的一部分功能。在本节,我们将展示一些新的元字符和如何使用组来检索被匹配的文本部分。

更多的元字符

还有一些我们还没展示的元字符,其中的大部分将在下一章节展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android binder 框架和学习资料

1Android binder 是学习 Android 系统一定要啃得硬骨头,可能你刚开始的时候并不理解其中的精髓,但是在 android 系统的很多地方你都会遇到它。不过要我自己写明白其中的逻辑脉络需要花费太多的时间和精力,而且传播效果也不是非常好…

Spring_Bean配置_生命周期_注解

Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之…

完全理解Gson(1):简单入门

GSON是Google开发的Java API,用于转换Java对象和Json对象。本文讨论并提供了使用API的简单代码示例。更多关于GSON的API可以访问:http://sites.google.com/site/gson/. 本文是GSON系列文章的第一篇。本文是其他文章的基础,因此不需要任何GSON…

python自由落体_VPython - example - 模拟自由落体运动

作者:liuyuan_jq2011-04-10from visual import *scene.width 400scene.height 300scene.autoscale 0scene.range (100,100,100)scene.center (0,40,0)ball sphere(pos(0,100,0),radius2)ground box(pos(0,-1,0),size(10,2,10))gravity 9.8 # m/s**2seconds …

创业碎碎念

1今天,跟几条跟我玩的比较好的篮球狗在讨论人生,其中有一条特别感慨,「为何看上去别人做起来这么容易的事,我们做很难?」。我突然不知道如何去回答这样的问题?这个问题也一直困扰着我。读我文章…

压缩过的js代码怎么还原_Fundebug 前端 JS插件更新至 1.7.0,拆分录屏代码,还原部分 Script error....

摘要: BUG 监控插件压缩至 18K。1.7.0拆分了录屏代码,BUG 监控插件压缩至18K,另外我们还原了部分 Script error,帮助用户更方便地 Debug。请大家及时更新哈~拆分录屏代码从1.7.0版本开始,我们拆分了录屏代码。如果需要…

SpringAOP描述及实现_AspectJ详解_基于注解的AOP实现_SpringJdbcTemplate详解

AOP AOP特点: 面向切面编程, 利用AOP对业务逻辑的各个部分进行抽取公共代码, 降低耦合度, 提高代码重用性, 同时提高开发效率.采取横向抽取, 取代传统纵向继承体系重复性代码解决事务管理, 性能监视, 安全检查, 缓存, 日志等问题Spring AOP在运行期, 通过反向代理的方式解决类…

(十九)java多线程之ForkJoinPool

本人邮箱: kco1989qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://github.com/kco1989/kco 代码已经全部托管github有需要的同学自行下载 引言 java 7提供了另外一个很有用的线程池框架,Fork/Join框架 理论 Fork/Join框架主要有以下两个类组…

串口,com口,ttl,max232你应该知道的事

1今天,说几个比较基础的知识,大家在开发过程中经常会遇到但是又不是特别注意的知识点。TTL电平:TTL是Transistor-Transistor Logic,即晶体管-晶体管逻辑的简称,它是计算机处理器控制的设备内部各部分之间通…

视觉slam十四讲 pdf_视觉SLAM十四讲|第12讲 回环检测

1. 什么是回环检测前面有说过累积误差的问题,前一时刻的误差会积累到后面,导致画不成圈圈,如图12-1所示,而画圈圈(全局一致性)很重要,所以需要有一个步骤来纠正当前的计算偏差。回环检测通过判断…

Caffe2 的基本数据结构(Basics of Caffe2 - Workspaces, Operators, and Nets)[4]

这篇文章主要介绍Caffe2的基本数据结构: WorkspacesOperatorsNets在开始之前最好先阅读以下Intro Turorial首先,导入caffe2。其中core和worksapce模块,这是必须的两个模块。如果你要使用Caffe2生成的protocol buffers,那么你也需要…

学习Java中遇到的问题积累_1

1.奇数性 看下面代码时候是否能判断参数 i 是奇数? public static boolean isOdd(int i){ return i % 2 1; }答案是: NO 看似正确的判断奇数, 但是如果 i 是负数, 那么它返回值都是false 造成这种现象的是 > 从思想上固化, 认为奇数只在正数范围, 故判断负数将报错, 在…

Linux 开发者最应该知道的命令汇总

1最近发现一个好东西,在 github 上发现的,我觉得非常适合大家研究 linux,说白了就是一些命令而已,只不过是作者帮忙总结好了,比较适合大家开发和学习 linux 系统,so , 推荐给大家学习下。https:…

华为任职资格_华为采购总部专业任职资格标准|

目 录 序 言 概述 .........................第一部分 级别定义.....................第二部分 资格标准 ....................1、采购工程师(生产采购)任职资格标准........2、采购员(生产采购)任职资格标准............3、采购员…

VirtualBox设置共享目录(主机win7,虚拟机Ubuntu)

1、安装增强功能包 启动虚拟机后,在 设备 -》 分配光驱 选择VBoxGuestAdditions.iso增强包镜像(在virtualbox安装目录下) 在虚拟机中挂载光驱镜像: #mkdir /mnt/cdrom#mount /dev/cdrom /mnt/cdrom 执行增强包安装程序&#xff…

C 语言内存分配

1昨天有一个群里的同学问我,他问我的问题是 c 语言函数是存在哪里的?是如何执行的?我下意识的觉得这位同学应该是个初学者,所以今天就写下一些基础方面的内容,「C语言的内存布局」。程序代码可以看做是一个…

正则表达式符号特殊详解_常用正则表达式_Java中正则表达式的使用

正则表达式符号详解 限定符: 指定一个组件必须出现多少次才能满足. 1.使用 “*”, “”, “?” 作为限定符: "*": 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。"": 匹配前面的子表达…

python中求包含5的数_Python 内置函数 ( ) 可以返回列表、元组、字典、集合、字符串以及 range 对象中元素个数。_学小易找答案...

【简答题】实例1:求两数相除的结果。 先后输入2个数据,计算第一个数除以第二个数的结果。 要求能够处理输入数据为非数字、除数为零、文件末尾EndOfFile 和用户使用Ctrl + C 命令终止程序等异常,提高用户体验。 当输入数据为非数字时提示错误信息并让用户重新输入。 input()函数…

没有梦想,你跟咸鱼有什么分别?

1标题起的有点夸张,其实这个就是一个招聘贴,之前从来没有用发头条文章来招聘,实在不好意思,这个招聘对我非常重要,这是一个非常好的朋友公司的招聘信息,也希望大家帮忙扩散一下,因为…

一个很Low的通讯录管理系统(但是能用)C/C++单链表实现

通讯录管理系统的设计 问题需求分析 在计算机还未普及之前通讯管理都是由联系人采用名片,通讯录往往采用的是笔录手工记帐的方式来操作的。现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理。本通讯…