特殊字符:注意\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對象,用于提高字符串的匹配速度