字符串:
正則表達式
正則表達式元字符與語法圖:
注意事項:
正則表達式的嵌套需要使用“()”,例如(\d\d\d){2}代表的是六個數字\d\d\d{2}代表的是4個數字。
正則表達式每個分組會自動擁有一個組號,從左向右分別表示為\1,\2…例如(abc)\1代表匹配abc兩次。
三種間隔符號——“^”(代表匹配字符串首部子串),“$”(代表匹配結束部分的子串),“\b”(分隔單詞)
findall() sub() subn()創建副本,不改變原字符串
sys.re模塊使用:
findall(pattern,string,flags = 0); 搜索string,以列表形式返回全部能匹配的子串,例子:
s = "HELLO WORLD"
print re.findall(r"^hello",s)
print re.findall(r"^hello",s,re.I)
print re.findall("WORLD$",s)
print re.findall(r"wORLD$",s,re.I)
print re.findall(r"\b\w+\b",s)
sub(pattern,repl,string,count = 0);使用repl替換string中每一個匹配的子串后返回替換后的字符串。 當repl是一個字符串時,可以使用\id或\g<id>、\g<name>引用分組,但不能使用編號0。 當repl是一個方法時,這個方法應當只接受一個參數(Match對象),並返回一個字符串用於替換(返回的字符串中不能再引用分組)。 count用於指定最多替換次數,不指定時全部替換。subn(pattern,repl,string,count = 0); 返回 (sub(repl, string[, count]), 替換次數)。例子:
s = "hello world"
print re.sub("hello","hi",s) #不改變原字符串
print re.sub("hello","hi",s[-4:])
print re.sub("world","China",s[-5:])
s = '你好 WORLD2'
print "匹配字母數字:" + re.sub(r"\w",'hi',s)
print "替換次數:" + str(re.subn(r"\w",'hi',s)[1])
print "匹配非字母數字:" + re.sub(r"\W",'hi',s) #這里一個漢字是兩個字符
print "替換次數:" + str(re.subn(r"\W",'hi',s)[1])
print "匹配空白字符:" + re.sub(r"\s",'hi',s)
print "匹配數字字符:" + re.sub(r"\d",'hi',s)
print "匹配任意字符:" + re.sub(r".",'hi',s)
re模塊規則選項:
- re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
- M(MULTILINE): 多行模式,改變'^'和'$'的行為(參見上圖)
- S(DOTALL): 點任意匹配模式,改變'.'的行為
- L(LOCALE): 使預定字符類 \w \W \b \B \s \S 取決於當前區域設定
- U(UNICODE): 使預定字符類 \w \W \b \B \s \S \d \D 取決於unicode定義的字符屬性
- X(VERBOSE): 詳細模式。這個模式下正則表達式可以是多行,忽略空白字符,並可以加入注釋。
pattern對象的使用:
1 正則表達式的解析十分費時,若多次使用findall等函數進行匹配可能會降低效率,若多次使用同一規則匹配字符串,可以使用compile()函數進行預編譯,compile()函數返回pattern對象,示例如下:
s = "1ab23bv456"
p = re.compile(r"\d+")
print p.findall(s);
print p.pattern
2 函數compile()通常和match(),search(),group()一起使用,對含有分組的正則表達式進行解析。含分組的表達式從左向右計數,第一個圓括號出現的是第一組,以此類推,但是0號組表示用於匹配整個正則表達式的結果。match()和search()方法返回match對象,match對象提供了一系列的方法和屬性來管理匹配的結果。
p = re.compile(r"(abc)\1")
m = p.match("abcabcabc")
print m.group(0)
print m.group(1)
print m.group()
p = re.compile(r"(?P<one>abc)(?P=one)")
m = p.search('abcabcabc')
print m.group('one')
print m.groupdict().keys()
print m.groupdict().values()
print m.re.pattern

