以下內容爲從慕課網聽來的,記下筆記,以便以後查用。
1.search(pattern, string, flags=0) 在一個字符串中查找匹配(查找第一次出現的位置)
2.findall(pattern, string, flags=0) 找到匹配,返回所有匹配部分的列表
3. sub(pattern, repl, string, count=0, flags=0) 將字符串中匹配正則表達式的部分替換爲其他值
4.split(pattern, string, maxsplit=0, flags=0) 根據匹配分割字符串,返回分割字符串組成的列表
1. 查找第一個出現的位置,類似於string 的 find方法,不過後者是查找固定子串
str1 = 'imooc videonum = 1000'
str1.find('1000') # 固定子串
info = re.search(r'\d+', str1) # 正則方法,可以查找任意數字
info.group() # '1000'
2.findall 方法講解
str2 = 'C++=100, java=90, python=80'
info = re.search(r'\d+', str2)
info.group() # 100 ,只返回一個匹配值,而我們想查找所有時長,就要用到findall()了
info = re.findall(r'\d+', str2)
info.group() # ['100', '90', '80'],求和很容易了
3.pattern爲正則表達式,repl可爲字符串,可爲函數返回的字符串,string被替換字符串,count是對替換的限制,flags爲re模塊的標誌
eg:
str3 = 'imooc videonum = 1000'
info = re.sub(r'\d+', '1001', str3)
info: 'imooc videonum = 1000'
思考:如果最後的數字變了,最後數字加1如何處理?
方法:repl定義爲一個函數,匹配到的對象傳入repl定義的函數中
def add1(match):
val = match.group()
num = int(val) + 1
return str(num)
info = re.sub(r'\d+', add1, str3)
info: 'imooc videonum = 1001'
解釋:先將正則表達式去匹配string,然後把匹配到的match 對象作爲參數傳入add1
4. split比字符串分割更靈活
str4 = 'imooc:C C++ Java Python' # 將4個種類分割開
re.split(r':| ', str4) # 比字符串方便
str4 = 'imooc:C C++ Java, Python'
re.split(r':| |,', str4)