以下内容为从慕课网听来的,记下笔记,以便以后查用。
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)