特殊字符:注意\b是匹配单词而非字符串的开始和结束; \w不能匹配汉字
限定符放在匹配符的后边
2 括号分组:
(\d\d\d){2} #有括号匹配6位数字
\d\d\d{2} #没有括号匹配4位数字
3 ?的使用
4 sys.re模块的常用函数表:查找、分隔、替换字符串
re模块的规则选项:大小写 flags参数是附加选项,如re.I表示忽略大小写
5 实战:字符串前边的r表示制定规则,出现意想不到的错误时很可能是漏加r
import re
# ^与$的使用
s = "HELLO WORLD"
print re.findall(r"^hello", s) print re.findall(r"^hello", s,
re.IGNORECASE) print re.findall(r"WORLD$", s)
print re.findall(r"wORld$", s, re.I)
print re.findall(r"\b\w+\b", s)
import re
#sub用法,关于替换
s = "hello world"
print re.sub("hello", "hi",
s) print re.sub("hello", "hi", s[-4:]) print re.sub("world", "China", s[-5:]) #3个sub都是打印s字符串转变后的结果
print s
6 subn、sub和匹配实例
import re
# 特殊字符的使用
s = "你好 WORLD2"
print "匹配字母数字:" + re.sub(r"\w", "hi", s) #一个字符就替换成hi,有6个
print "替换次数:" + str(re.subn(r"\w", "hi", s)[1]) #返回2元祖,第二个索引是替换次数
print "匹配非字母数字的字符:" + re.sub(r"\W", "hi",
s) #一个汉字相当于2个字符
print "替换次数:" + str(re.subn(r"\W", "hi", s)[1])
print "匹配空白字符:" + re.sub(r"\s", "*", s) print "替换次数:" + str(re.subn(r"\s", "*", s)[1])
print "匹配非空白字符:" + re.sub(r"\S", "hi", s)
print "替换次数:" + str(re.subn(r"\S", "hi", s) [1])
print "匹配数字:" + re.sub(r"\d", "2.0", s)
print "替换次数:" + str(re.subn(r"\d", "2.0", s)[1])
print "匹配非数字:" + re.sub(r"\D", "hi", s)
print "替换次数:" + str(re.subn(r"\D", "hi", s)[1])
print "匹配任意字符:" + re.sub(r".", "hi", s) print "替换次数:" + str(re.subn(r".", "hi", s)[1])
7解析电话号码 #返回的是列表!
import re
# 限定符的使用
tel1 = "0791-1234567"
print re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}", tel1)
tel2 = "010-12345678"
print re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}", tel2)
tel3 = "(010)12345678"
print re.findall(r"[\(]?\d{3}[\)-]?\d{8}|[\(]?\d{4}[\)-]?\d{7}",
tel3)
print re.findall(r"a.*?c", "abcabc")
正则表达式的解析费时,如果多次使用findall方式匹配字符串,效率可能比较低,可以使用compile()进行预编译,返回一个pattern对象,用于提高字符串的匹配速度