Python 的 re 模块,使得Python具备了使用全部正则表达式的功能
Python中的正则表达式
正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义. r
前缀与regex并不特别相关,但通常与Python中的字符串有关.
>>> print 'this is n a test'
this is
a test
>>> print r'this is n a test'
this is n a test
>>>
re.compile() 函数
compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
re.compile(pattern[, flag])
其中,pattern 是一个字符串形式的正则表达式,flag 是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等。
下面,让我们看看例子。
import re
# 将正则表达式编译成 Pattern 对象
pattern = re.compile(r'd+')
在上面,我们已将一个正则表达式编译成 Pattern 对象,接下来,我们就可以利用 pattern 的一系列方法对文本进行匹配查找了。Pattern 对象的一些常用方法主要有:
- match 方法
- search 方法
- findall 方法
- finditer 方法
- split 方法
- sub 方法
- subn 方法
re.match(pattern, string, flags)
第一个参数是正则表达式,如果匹配成功,则返回一个Match,否则返回一个None;第二个参数表示要匹配的字符串;第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
函数的返回值为真或者假。
例如:match(‘p’,’python’)返回值为真;match(‘p’,’http://wwww.python.org’)返回值为假。
re.search(pattern, string, flags)
每个参数的含意与re.match一样。
re.search会在给定字符串中寻找第一个匹配给定正则表达式的子字符串。
函数的返回值:如果查找到则返回查找到的值,否则返回为None。
re.findall(pattern, string[, flags])
findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。
l = re.findall(r'张','张三 张三丰 张无忌 张小凡')
print(l)
['张', '张', '张', '张']
在这个例子中,我们会发现findall返回了所有匹配的值,这是因为“张”字在后面的字符串中出现了4次。
re.split()
string 对象的 split() 方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或者是分隔符周围不确定的空格。 当你需要更加灵活的切割字符串的时候,最好使用 re.split() 方法:
>>> line = 'asdf fjdk; afed, fjek,asdf, foo'
>>> import re
>>> re.split(r'[;,s]s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
flags参数
re.I
IGNORECASE
忽略字母大小写
re.L
LOCALE
影响 “w, “W, “b, 和 “B,这取决于当前的本地化设置。
re.M
MULTILINE
使用本标志后,‘^’和‘$’匹配行首和行尾时,会增加换行符之前和之后的位置。
re.S
DOTALL
使 “.” 特殊字符完全匹配任何字符,包括换行;没有这个标志, “.” 匹配除了换行符外的任何字符。
re.X
VERBOSE
当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后。
它也可以允许你将注释写入 RE,这些注释会被引擎忽略;
注释用 “#”号 来标识,不过该符号不能在字符串或反斜杠之后。
![v2-3d6f0b0cdd7632882b0ca6d20143ea66_ipico.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=0c4d63f9-0330-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-3d6f0b0cdd7632882b0ca6d20143ea66_ipico.jpg)