python知识捡拾---正则专题

正则:

限定符与"?"的组合

符号说明
*?匹配零次或多次,且最短匹配
+?匹配一次或多次,且最短匹配
??匹配一次或零次,且最短匹配
{m,n}?重复m此,且最短匹配
(? #…)正则表达式中的注释
(? P…)给分组命名,name表示分组的名称
(? p=name)使用名为name的分组

re模块的规则选项:

选项说明
I忽略大小写
L字符集本地化
M多行匹配
S使".“匹配包括”\n"在内的所有字符
X忽略正则表达式中的空白、换行,以便添加注释
1.re模块的findall()查找匹配

示例1:

import re
s="HELLO WORLD"
print re.findall(r"^hello",s)  #[]
print re.findall(r"^hello",s,re.I) #HELLO
print re.findall("WORLD$",s)   #WORLD
print re.findall(r"WORLD$",s,re.I)#WORLD
2.re模块的sub():字符串的替换
import re
s="hello world"
print re.sub("hello","hi",s) #hi world
print re.sub("hello","hi",s[-4:]) #由于s[-4:]没有找到hello,返回s[-4:]的内容orld
print re.sub("world","China",s[-5:]) #把字符串"world"替换为"China",输出结果:China
注意:sub()先创建变量s的拷贝,然后在拷贝中替换字符串,并不会改变变量s的内容

subn()功能与sub()相同,但是多返回1个值,即匹配后的替换次数

s="你好 WORLD2"
print "匹配字母数字:"+re.sub(r"\w","hi",s) #你好 hihihihihihi
print "替换次数:"+str(re.subn(r"\w","hi",s)[1])#替换次数6
3.电话号码匹配演示
import re
#匹配电话号码
tel1 = "0791-1234567"
tel3="010-12345678"
print re.findall(r"\d{4}-\d{7}",tel1)
tel2 = "(010)12345678"
#[\) -]?表示最多只能取")"或"-"其中之一
print re.findall(r"[\(]?\d{3}[\) -]?\d{8}|[\(]?\d{4}[\) -]?\d{7}",tel3)
正则表达式的解析非常费时,如果多次使用findall()的方式匹配字符串,搜索效率可能比较低。这时可以使用compile()函数进行预编译。
import re
s="1abc23def45"
p=re.compile(r"\d+")
print p.findall(s)   #['1', '23', '45']
print p.pattern     #输出当前使用的正则表达式\d+
4.演示group的使用:
import re
#正则表达式分组的解析
p=re.compile(r"(abc)\1")#定义一个分组(abc)在后面使用"\1"再次调用该分组
m=p.match("abcabcabc")
print m.group(0)
print m.group(1)
print m.group()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值