参考源博客地址:http://www.runoob.com/python/python-reg-expressions.html#flags
正则表达式用于检查一个字符串是否与某一种模式相匹配,在python中re模块用于正则表达的功能。
re.match函数
从字符串的起始位置开始匹配,如果匹配成功返回匹配的对象,匹配不成功返回none。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
#!/usr/bin/python
#coding=utf-8
import re
str1 = 'this is a python program!'
matchObj = re.match('this', str1)
print matchObj.group()
print (re.match('this', str1))
print (re.match('this', str1).span())
print (re.match('is', str1))
输出结果为:
this
<_sre.SRE_Match object at 0x02167E58>
(0, 4) //span函数返回的是匹配字符串在原始字符串中的序号范围
None
re.search函数
和match函数不同,search函数会扫描整个字符串并返回第一个成功的匹配。函数语法:
re.search(pattern, string, flags=0)
参数含义和match同样
re.sub函数
这个函数用于检索和替换。函数语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
#!/usr/bin/python
#coding=utf-8
import re
str1 = 'this is a python program!'
str2 = re.sub('s','l',str1)
print str2
运行结果为:thil il a python program! 由此可见代码会把str1中的所有s都替换成l。 如果把str2改成str2 = re.sub('s','l',str1, 1) 则运行结果为:thil is a python program! 只把第一个s替换成了l
re.compile函数
compile函数用于编译表达式,生成一个正则表达式对象,可以调用match,search等方法。语法为
re.compile(pattern[, flags])
参数:
-
pattern : 一个字符串形式的正则表达式
-
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- re.X 为了增加可读性,忽略空格和 # 后面的注释
#!/usr/bin/python
#coding=utf-8
import re
pattern = re.compile(r'\d+')
m = pattern.match('one12kjhdd67lk')
print m
m = pattern.match('one12kjhdd67lk', 3, 15)
print m
print m.group()
运行结果为:
None
<_sre.SRE_Match object at 0x00677E58>
12 //从这个结果看 只返回了第一个匹配的字符
findall函数
findall方法用于寻找字符串中所有符合条件的字符并返回一个列表,若不匹配返回一个空列表。语法格式:
findall(string[, pos[, endpos]])
- string : 待匹配的字符串。
- pos : 可选参数,指定字符串的起始位置,默认为 0。
- endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
把上面代码段中的“m = pattern.match('one12kjhdd67lk')”换成“m = pattern.findall('one12kjhdd67lk')” 则运行结果为:
['12', '67']
re.finditer函数
iter代表的英文单词是iterator即迭代器,这个函数会匹配符合正则表达式的所有子串,并把他们作为一个迭代器返回。语法为:
re.finditer(pattern, string, flags=0)
#!/usr/bin/python
#coding=utf-8
import re
pattern = re.compile(r'\d+')
m = pattern.finditer("12a32bc43jf3")
print m
for i in m:
print i.group()
运行返回:<callable-iterator object at 0x0265E610> //注意这是一个迭代器的对象,和前面返回的match对象不同
12
32
43
3
re.split函数
split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
参数:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
print re.split('\W+', 'runoob, runoob, runoob.')
print re.split('\W+', 'runoob, runoob, runoob.',1)
返回值如下:
['runoob', 'runoob', 'runoob', '']
['runoob', 'runoob, runoob.']
\W代表匹配非字符,数字,下划线
对于找不到匹配的字符串,不做分割