比较详细Python正则表达式操作指南(re使用)[2]
2014-04-19 23:02
706 查看
使用正则表达式
现在我们已经看了一些简单的正则表达式,那么我们实际在 Python 中是如何使用它们的呢?re 模块提供了一个正则表达式引擎的接口,可以让你将 REs 编译成对象并用它们来进行匹配。
编译正则表达式
正则表达式被编译成 `RegexObject` 实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换。#!python
>>> import re
>>> p = re.compile('ab*')
>>> print p
<re.RegexObject
instance at 80b4150>
re.compile() 也接受可选的标志参数,常用来实现不同的特殊功能和语法变更。我们稍後将查看所有可用的设置,但现在只举一个例子:
#!python
>>> p = re.compile('ab*',
re.IGNORECASE)
RE 被做为一个字符串发送给 re.compile()。REs 被处理成字符串是因为正则表达式不是 Python 语言的核心部分,也没有为它创建特定的语法。(应用程序根本就不需要
REs,因此没必要包含它们去使语言说明变得臃肿不堪。)而 re 模块则只是以一个 C 扩展模块的形式来被 Python 包含,就象 socket 或 zlib 模块一样。
将 REs 作为字符串以保证 Python 语言的简洁,但这样带来的一个麻烦就是象下节标题所讲的。
反斜杠的麻烦
在早期规定中,正则表达式用反斜杠字符 (""") 来表示特殊格式或允许使用特殊字符而不调用它的特殊用法。这就与 Python 在字符串中的那些起相同作用的相同字符产生了冲突。让我们举例说明,你想写一个 RE 以匹配字符串 ""section",可能是在一个 LATEX 文件查找。为了要在程序代码中判断,首先要写出想要匹配的字符串。接下来你需要在所有反斜杠和元字符前加反斜杠来取消其特殊意义。
字符 | 阶段 |
\section | 要匹配的字符串 |
\\section | 为 re.compile 取消反斜杠的特殊意义 |
"\\\\section" | 为字符串取消反斜杠 |
"\\"。在 REs 中反斜杠的这个重复特性会导致大量重复的反斜杠,而且所生成的字符串也很难懂。
解决的办法就是为正则表达式使用 Python 的
raw 字符串表示;在字符串前加个 "r" 反斜杠就不会被任何特殊方式处理,所以 r"\n" 就是包含"\" 和 "n" 的两个字符,而 "\n" 则是一个字符,表示一个换行。正则表达式通常在 Python 代码中都是用这种
raw 字符串表示。
常规字符串 | Raw 字符串 |
"ab*" | r"ab*" |
"\\\\section" | r"\\section" |
"\\w+\\s+\\1" | r"\w+\s+\1" |
执行匹配
一旦你有了已经编译了的正则表达式的对象,你要用它做什么呢?`RegexObject` 实例有一些方法和属性。这里只显示了最重要的几个,如果要看完整的列表请查阅 Python LibraryReference
方法/属性 | 作用 |
match() | 决定 RE 是否在字符串刚开始的位置匹配 |
search() | 扫描字符串,找到这个 RE 匹配的位置 |
findall() | 找到 RE 匹配的所有子串,并把它们作为一个列表返回 |
finditer() | 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回 |
你可以用采用人机对话并用 re 模块实验的方式来学习它。如果你有 Tkinter 的话,你也许可以考虑参考一下 Tools/scripts/redemo.py,一个包含在 Python 发行版里的示范程序。
首先,运行 Python 解释器,导入 re 模块并编译一个 RE:
#!python
Python 2.2.2 (#1,
Feb 10 2003, 12:57:01)
>>> import re
>>> p = re.compile('[a-z]+')
>>> p
<_sre.SRE_Pattern
object at 80c3c28>
相关文章推荐
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)[3]
- 比较详细Python正则表达式操作指南(re使用)[4]
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)[5]
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)[6]
- 转:比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)[7]
- 比较详细Python正则表达式操作指南(re使用)
- 比较详细Python正则表达式操作指南(re使用)[8]
- 比较详细Python正则表达式操作指南(re使用)[9]
- 比较详细Python正则表达式操作指南(re使用)[10]
- 比较详细Python正则表达式操作指南(re使用)[1]
- 比较详细Python正则表达式操作指南(re使用)[11]
- 比较详细Python正则表达式操作指南(re使用)[12]
- 比较详细Python正则表达式操作指南(re使用)