动态规划算法十分重要:爬楼梯问题 找规律 最大子序和问题 最大子序积问题 找零钱问题等 动态规划: 1.中间状态值需要保存 2.想办法找到规律 当前的问题可不可以由上一个或者是其他结果推导出来 3.确定好初始状态 动态规划比递归快 python高级部分: 正则表达式: 1.数据挖掘(文本过滤) 2.验证输入是否合法 非必要时 不要用正则 计算很慢 耗cpu 优点:提高工作效率 节省代码 缺点:难以理解 python里面一切皆对象 在python里面的re模块: import re 查找匹配:seatch match 都是查找第一个匹配 match是从头部字符串开始查找 只匹配字符串的开始 如果不是开始 就不匹配了 re.search(可以放正则表达式的查找规则,文本) :查到匹配到的第一个对象 如果成功 返回一个match对象(match表示匹配了谁 spsan 表示在哪个位置) 如果失败 返回None re.match(可以放正则表达式的查找规则,文本):只能查找开头匹配到的第一个对象 如果成功 返回一个match对象(match表示匹配了谁 spsan 表示在哪个位置) 如果失败 返回空 r标志位(表示的是输出原始字符串 抑制转义) 取消转义 表示原始字符串的本身 如 r'\t'等同于'\\t' 前面那个查找规则:不加r需要两层转义 加r只需要一层转义(python转义一遍传给正则表达式 正则表达式再转义一次) 后面那个查找规则:不加r只需要一层转义 加r就完全不转义了(python转义一次 这个正则表达式不会再转义一次) 正则表达式,最好使用原始字符串,在前面加r,防止特殊字符的转义 match对象(通过search和match方法查找出来的结果就是一个match对象) 怎么拿到匹配到的东西?match对象.group() 怎么匹配到的开始的下标?match对象.start() 怎么匹配到的结尾的下标?match对象.end() (这个end下标指向的元素是不包括在匹配内容里面的 类似于切片) 匹配所有的符合条件的字符 findall和finditer re.findall(查找规则,查找范围):找到所有的匹配项 然后返回一个列表 re.finditer(查找规则,查找范围):找到所有的匹配项 并且每一项封装成match对象放在一个迭代对象返回 不可以直接获取值 只能用for i in re.finditer(查找规则,查找范围):返回的都是一个match对象 然后i.group()拿到里面的值等 正则替换:会全部都替换掉 re.sub('匹配正则','替换内容',文本范围或string) 正则编译:re,compile() 先把正则表达式编译成对象 然后再写 如:reg=re.compile("python") reg.findall(msg1) 相当于 re.findall("python",msg1) reg.findall(msg2) 相当于 re.findall("python",msg2) reg.findall(msg3) 相当于 re.findall("python",msg3) 单数反斜杠 正则表达式转义就会减去一个 python转义就会加上一个 正则表达式的解释分为两部分: 第一步,字符串进行转义,将转义后的结果传给模式字符串 第二步,正则对得到的模式字符串进行转义,然后再进行匹配 还是这个 不加r会经过两层转义 理论上来说反斜杠应该写的是双数 如果是单数python会自动给你加一个反斜杠 而正则表达式引擎会减去一个反斜杠 也就是说正则表达式引擎拿到"\\\" -->转义之后就是"\" 拿到"\\\\\" 转义之后就是"\\"