Python:正则表达式
python正則表達式功能模塊:re
matchObj = re.match(r'(\d+)([abcd]+)', '12bbcxyz') #[abcd]表示:a或b或c或d if matchObj:print matchObj.groups() #('12', 'bbc')print matchObj.group() #12bbcprint matchObj.group(1) #12print matchObj.group(2) #bbc # print matchObj.group(3) #報錯IndexError: no such group else:print 'None match're.match()方法:
參數1是正則表達式匹配模式,參數2是待匹配的原始字符串;
此方法只從字符串的開頭匹配,若開頭不匹配即使字符串中間有子串能匹配也返回None。如參數2換為'a12bbcxyz'則輸出None match。
re.search()方法:
和match方法參數一樣,不過可以匹配字符串里面的子串,如參數2換為'a12bbcxyz'則輸出不變。
match和search兩個方法只能找到匹配參數1匹配模式的,從參數2原始字符串左起的第一個字符串。若想找到所有的匹配的字符串,用下面介紹的findall方法。
若匹配成功則返回一個匹配對象:matchObj:
其有group(num=0)和groups()方法:
而group(n)(n=1、2、3…)會返回同第n分組匹配的字符串(參數1匹配模式里的每個括號里是一個分組);
group()方法有默認參數0,group(0)會返回同整個參數1模式匹配的字符串(這個非分組);
groups()方法返回所有分組組成的元組(若無分組返回空元組),第一個分組的組號為1。
findall方法:
findres = re.findall(r'\d[a-z]', '1one2two') print findres #['1o', '2t'] findres = re.findall(r'(\d)[a-z]', '1one2two') print findres #['1', '2'] findres = re.findall(r'(\d)([a-z])', '1one2two') print findres #[('1', 'o'), ('2', 't')]若參數1匹配模式無分組:則返回所有同整個匹配模式匹配的字符串組成的列表;
若參數1有分組:若只有1個分組,則返回所有同分組匹配的字符串組成的列表;若分組數大于1,則返回所有同各分組匹配的字符串組成的元組的列表。
加入匹配標志位flags:
pattern = re.compile('</div class="desc">(.*)</div>', re.M) div_list = re.findall(pattern, page) print(div_list)正則替換:sub方法
普通字符串替換:
print 'ABC'.replace('A' , 'a') #aBC正則替換:
print re.sub(r'\d', '*', '123bbc', count=2) # **3bbc count=2表示進行2次替換 print re.sub(r'\d+', '*', '123bbc', count=2) # *bbc 此處只進行了1次替換 print re.sub(r'\d+?', '*', '123bbc', count=2) # **3bbc 加?表示非貪婪模式:最小范圍匹配。進行了2次替換。count參數指定從左邊起替換幾次,默認為0,表示全部替換;
此種情況下參數1匹配模式分組信息無效,只會對匹配整個模式的字符串進行替換。
另外sub方法的第二個參數除了可以是字符串外,還可以是替換函數:
替換函數接受的參數是匹配對象;
返回值是匹配整個模式的字符串將要被替換為的內容;
count參數決定替換函數執行的次數。
字符串分割:
import re print re.split(r'\d+(b)', '123bb234c123bbc123bbc', 2) # ['', 'b', 'b234c', 'b', 'bc123bbc']與參數1匹配模式中的分組匹配的字符串,會在分割后的返回值列表中出現;
參數3指定最大分割次數,也就是最多用幾個能完整匹配參數1匹配模式的字符串分割。
各個方法的原型:
re.match(pattern, string, flags=0) #返回值:匹配對象 re.search(pattern, string, flags=0) #返回值:匹配對象 re.findall(pattern, string, flags=0) #返回值:list re.sub(pattern, repl, string, count=0, flags=0) #返回值:str, repl re.split(pattern, string, maxsplit=0, flags=0) #返回值:list其中flags標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。具體的:如re.I | re.M 被設置成 I和 M標志。
| re.I | 使匹配對大小寫不敏感 |
| re.L | 做本地化識別(locale-aware)匹配 |
| re.M | 多行匹配,影響 ^ 和 $ |
| re.S | 使 . 匹配包括換行在內的所有字符 |
| re.U | 根據Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B. |
| re.X | 該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。 |
轉載于:https://www.cnblogs.com/xuejianbest/p/10285137.html
總結
以上是生活随笔為你收集整理的Python:正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串和List:索引值以
- 下一篇: 梦到各种各样的花是什么意思