没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第 1 页 / 共 30 页
Python 正则表达式操作指南
http://www.amk.ca/python/howto/regex/ 原文出处:
翻译出处:
http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC
%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
A.M. Kuchling (amk@amk.ca) 原文作者:
创作共用协议 授权许可:
FireHare 翻译人员:
Leal 校对人员:
xrzs 整理人员:
Python 1.5 及后续版本
适用版本:
摘要
本文是通过 Python 的 re 模块来使用正则表达式的一个入门教程,和库参考手
册的对应章节相比,更为浅显易懂、循序渐进。
本文可以从 http://www.amk.ca/python/howto 捕获
第 2 页 / 共 30 页
目录
Python 正则表达式操作指南 .................................................... 1
1
.................................................................. 3
、简单模式
字符匹配 ................................................................. 4
重复 ..................................................................... 5
2
............................................................ 6
、使用正则表达式
编译正则表达式
........................................................... 6
反斜杠的麻烦
............................................................. 7
执行匹配
................................................................. 8
模块级函数
.............................................................. 10
编译标志
................................................................ 11
3
............................................................. 13
、更多模式功能
更多的元字符
............................................................ 14
分组
.................................................................... 16
无捕获组和命名组
........................................................ 18
前向界定符
.............................................................. 20
4
............................................................... 21
、修改字符串
将字符串分片
............................................................ 22
搜索和替换
.............................................................. 23
5
................................................................. 25
、常见问题
使用字符串方式
.......................................................... 25
match() vs search()
.................................................... 26
贪婪 vs 不贪婪
.......................................................... 26
不用 re.VERBOSE
......................................................... 27
6
..................................................................... 28
、反馈
7
............................................................... 28
、关于本文档
8、附录:python
.................................................. 29
正则全景图
第 3 页 / 共 30 页
简介
Python 自 1.5 版本起增加了 re 模块,它提供 Perl 风格的正则表达式模式。
Python 1.5 之前版本则是通过 regex 模块提供 Emacs 风格的模式。Emacs 风
格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再使用
regex 模块,当然偶尔你还是可能在老代码里发现其踪影。
就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,
(在 Python 中)它内嵌在 Python 中,并通过 re 模块实现。使用这个小型语
言,你可以为想要匹配的相应字符串集指定规则;该字符串集可能包含英文语句、
e-mail 地址、TeX 命令或任何你想搞定的东西。然后你可以问诸如“这个字符串
匹配该模式吗?”或“在这个字符串中是否有部分匹配该模式呢?”。你也可以使
用 RE 以各种方式来修改或分割字符串。
正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
在高级用法中,也许还要仔细留意引擎是如何执行给定 RE ,如何以特定方式编
写 RE 本文并不涉及优化,因为那要求你已充以令生产的字节码运行速度更快。
分掌握了匹配引擎的内部机制。
正则表达式语言相对小型和受限(功能有限),因此并非所有字符串处理都能用
正则表达式完成。当然也有些任务可以用正则表达式完成,不过最终表达式会变
得异常复杂。碰到这些情形时,编写 Python 代码进行处理可能反而更好;尽
管 Python 代码比一个精巧的正则表达式要慢些,但它更易理解。
1 、简单模式
我们将从最简单的正则表达式学习开始。由于正则表达式常用于字符串操作,那
我们就从最常见的任务:字符匹配 下手。
有关正则表达式底层的计算机科学上的详细解释(确定性和非确定性有限自动
机),你可以查阅编写编译器相关的任何教科书。
第 4 页 / 共 30 页
字符匹配
大多数字母和字符一般都会和自身匹配。例如,正则表达式 test 会和字符串
“test”完全匹配。(你也可以使用大小写不敏感模式,它还能让这个 RE 匹配
“Test”或“TEST”;稍后会有更多解释。)
这个规则当然会有例外;有些字符比较特殊,它们和自身并不匹配,而是会表明
应和一些特殊的东西匹配,或者它们会影响到 RE 其它部分的重复次数。本文很
大篇幅专门讨论了各种元字符及其作用。
这里有一个元字符的完整列表;其含义会在本指南余下部分进行讨论。
. ^ $ * + ? { [ ] \ | ( )
我们首先考察的元字符是"[" 和 "]"。它们常用来指定一个字符类别,所谓字
符类别就是你想匹配的一个字符集。字符可以单个列出,也可以用“-”号分隔的
两个给定字符来表示一个字符区 间。例如,[abc] 将匹配"a", "b", 或 "c"
中的任意一个字符;也可以用区间[a-c]来表示同一字符集,和前者效果一致。
如果你只想匹配小写字母,那么 RE 应写成 [a-z].
元字符在类别里并不起作用。例如,[akm$]将匹配字符"a", "k", "m", 或 "$"
中的任意一个;"$"通常用作元字符,但在字符类别里,其特性被除去,恢复成
普通字符。
你可以用补集来匹配不在区间范围内的字符。其做法是把"^"作为类别的首个字
符;其它地方的"^"只会简单匹配 "^"字符本身。例如,[^5] 将匹配除 "5" 之
外的任意字符。
也许最重要的元字符是反斜杠"\"。 做为 Python 中的字符串字母,反斜杠后
面可以加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符,这
样你就可以在模式中匹配它们了。举个例子,如果你需要 匹配字符 "[" 或 "\",
你可以在它们之前用反斜杠来取消它们的特殊意义: \[ 或 \\。
一些用 "\" 开始的特殊字符所表示的预定义字符集通常是很有用的,象数字集,
字母集,或其它非空字符集。下列是可用的预设特殊字符:
\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
第 5 页 / 共 30 页
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
这样特殊字符都可以包含在一个字符类中。如,[\s,.]字符类将匹配任何空白
字符或","或"."。
本节最后一个元字符是 . 。它匹配除了换行字符外的任何字符,在 alternate
模式(re.DOTALL)下它甚至可以匹配换行。"." 通常被用于你想匹配“任何字
符”的地方。
重复
正则表达式第一件能做的事是能够匹配不定长的字符集,而这是其它能作用在字
符串上的方法所不能做到的。 不过,如果那是正则表达式唯一的附加功能的话,
那么它们也就不那么优秀了。它们的另一个功能就是你可以指定正则表达式的一
部分的重复次数。
我们讨论的第一个重复功能的元字符是 *。* 并不匹配字母字符 "*";相反,
它指定前一个字符可以被匹配零次或更多次,而不是只有一次。
举个例子,ca*t 将匹配 "ct" (0 个 "a" 字符), "cat" (1 个 "a"), "caaat"
(3 个 "a" 字符)等等。RE 引擎有各种来自 C 的整数类型大小的内部限制,以
防止它匹配超过 20 亿个 "a" 字符;你也许没有足够的内存去建造那么大的字
符串,所以将不会累计到那个限制。
象 * 这样地重复是“贪婪的”;当重复一个 RE 时,匹配引擎会试着重复尽可能
多的次数。如果模式的后面部分没有被匹配,匹配引擎将退回并再次尝试更小的
重复。
一步步的示例可以使它更加清晰。让我们考虑表达式 a[bcd]*b。它匹配字母
"a",零个或更多个来自类 [bcd]中的字母,最后以 "b" 结尾。现在想一想该 RE
对字符串 "abcbd" 的匹配。
Step
Matched
Explanation
1
a
a 匹配模式
2
abcbd
引擎匹配 [bcd]*,并尽其所能匹配到字符串的结尾
3
Failure
引擎尝试匹配 b,但当前位置已经是字符的最后了,所以失败
4
abcb
退回,[bcd]*尝试少匹配一个字符。
5
Failure
再次尝次 b,但在当前最后一位字符是"d"。
6
abc
再次退回,[bcd]*只匹配 "bc"。
7
abcb
再次尝试 b ,这次当前位上的字符正好是 "b"
剩余29页未读,继续阅读
xrzs1986
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NetOps-py通过sftp替换网络设备启动文件
- STM32单片机FPGA毕设电路原理论文报告任务驱动教学法在单片机课程教学中的应用
- STM32单片机FPGA毕设电路原理论文报告任务驱动法在单片机教学中的应用
- STM32单片机FPGA毕设电路原理论文报告人造金刚石压机智能化压力测控系统设计
- 以某列为依据匹配多项(Excel版)
- STM32单片机FPGA毕设电路原理论文报告人体短臂离心机实验台的显示控制系统
- STM32单片机FPGA毕设电路原理论文报告人工气候室监控系统的环境控制器研究
- STM32单片机FPGA毕设电路原理论文报告染整自动线张力控制系统的设计
- 数据挖掘与机器学习-实验
- 基于Linux系统Nginx的动态网站的LNMP环境源码包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页