0
点赞
收藏
分享

微信扫一扫

python的super super easy教程 | 正则表达式

yeamy 2022-02-26 阅读 51
动态规划算法十分重要:爬楼梯问题  找规律  最大子序和问题  最大子序积问题  找零钱问题等

动态规划:
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会自动给你加一个反斜杠  而正则表达式引擎会减去一个反斜杠  也就是说正则表达式引擎拿到"\\\"  -->转义之后就是"\" 拿到"\\\\\"  转义之后就是"\\"
举报

相关推荐

0 条评论