python中的正则表达式

参考源博客地址: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 : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

    1. re.I 忽略大小写
    2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    3. re.M 多行模式
    4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    6. 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代表匹配非字符,数字,下划线

对于找不到匹配的字符串,不做分割

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值