python中的re模块实现了正则表达式的功能。

  首先产生正则表达式模式,然后python将其转化为字节码,通过c语言的匹配引擎进行配操作,匹配的基本原理类似于先深搜索。

 

  正则表达式的元字符有python re模块 _职场. ^ $ * + ? { [ ] \ | ( )

 

.表示任意字符

 

[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系。

 

^ 如果放在字符串的开头,则表示取非的意思。[^5]表示除了5之外的其他字符。而如果^不在字符串的开头,则表示它本身。

 

具有重复功能的元字符:

 

* 对于前一个字符重复0到无穷次

 

+ 对于前一个字符重复1到无穷次

 

?对于前一个字符重复0到1次

 

{m,n} 对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} = +, {0,1} = ?

 

{m} 对于前一个字符重复m次

 

\

 

python re模块 _职场\d 匹配任何十进制数;它相当于类 [0-9]。
python re模块 _职场

python re模块 _职场
\D 匹配任何非数字字符;它相当于类 [^0-9]。
python re模块 _职场

python re模块 _职场
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
python re模块 _职场
python re模块 _职场
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
python re模块 _职场
python re模块 _职场
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
python re模块 _职场

python re模块 _职场
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

 

使用正则表达式

现在我们已经看了一些简单的正则表达式,那么我们实际在 Python 中是如何使用它们的呢? re 模块提供了一个正则表达式引擎的接口,可以让你将 REs 编译成对象并用它们来进行匹配。

编译正则表达式

正则表达式被编译成 `RegexObject` 实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换。

python re模块 _职场#!python
python re模块 _职场

python re模块 _职场
>>> import re
python re模块 _职场
python re模块 _职场
>>> p = re.compile('ab*')
python re模块 _职场
python re模块 _职场
>>> print p
python re模块 _职场
python re模块 _职场
<re.RegexObject instance at 80b4150>

re.compile() 也接受可选的标志参数,常用来实现不同的特殊功能和语法变更。我们稍後将查看所有可用的设置,但现在只举一个例子:

python re模块 _职场#!python
python re模块 _职场

python re模块 _职场
>>> p = re.compile('ab*', re.IGNORECASE)
python re模块 _职场

RE 被做为一个字符串发送给 re.compile()。REs 被处理成字符串是因为正则表达式不是 Python语言的核心部分,也没有为它创建特定的语法。(应用程序根本就不需要 REs,因此没必要包含它们去使语言说明变得臃肿不堪。)而 re 模块则只是以一个 C 扩展模块的形式来被 Python 包含,就象 socket 或 zlib 模块一样。

执行匹配

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

方法/属性 作用
match() 决定 RE 是否在字符串刚开始的位置匹配
search() 扫描字符串,找到这个 RE 匹配的位置
findall() 找到 RE 匹配的所有子串,并把它们作为一个列表返回
finditer() 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回


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