正则与re模块

正则表达式和re模块
1.  正则式是客观存在的,用于匹配字符串的一种方法。多用于数据分析和爬虫。
     正则是一种匹配规则,任何编程语言通用.

1.1  中括号[字符],所有的限定都是只表示一位

1.2   元字符w d s   字符,数字,下划线
           大写的  对应非,与上面一组即为全部
           .是换行符之外的所有字符。
            对应于python里的re.S可以匹配所有字符,是python的flags的标识符,默认是re.U,
                回车和制表符
            ^和$符  前者只针对开头内容往后匹配,后者永远写在最后

            分组是对多个字符组做整体约束用的.在python中,分组优先,findall默认只显示括号里的字符,split会保留切割的刀子们

            | 是两者取一,从左到右匹配,有了就停,所以要把长的规则放前面,不然就永远取不到长的了
            [^]除了字符组内的,其他都匹配

1.3    量词  *   0到多
         +  1到多
         ?  1和0
        {n}  {n,}  {n,m}  n或n到m或n到无穷


1.4  转义的问题
如果带匹配的字符串里出现了上述元字符,就在正则的里面再加个,且都在前面加个r,表示都是真实无转义

惰性匹配,在量词后面加问号,常用于.#?abc的意思是一直取下去,但是一旦遇到第一个abc就停。

默认正则是贪婪匹配直至最后一个符合要求的字符串才停

在python中使用正则规则,引入re模块

2. re模块
findall('正则规则','字符串')
得到一个列表,每一项都是字符串,得到全部目标字符串

ret=re.search('正则规则','字符串'),只能找到第一个就停止了
此时返回的内容不是想到的字符串,需要.group(),没有则报错
为了不报错,if ret:print(ret.group())

ret=re.match('正则规则','字符串'),从头的第一个字符开匹配
如果从第一个字符开始能匹配上就返回一个需要.group来获取实际值的变量,不能就返回None
此时返回的内容不是想到的字符串,需要.group(),没有则报错
为了不报错,if ret:print(ret.group())

re.split('','') 根据正则关系进行split
re.sub('正则规则','替换后','字符串',次数) 根据正则关系进替换
re.subn('正则规则','替换后','字符串') 根据正则关系进替换,返回字符串和替换的次数
re.complie('') 编译:内部存放一个正则规则,把这个正则规则编译赋值
obj = e.complie(''),再利用其寻找的时候,obj.searchu.(字符串)
当一个正则规则反复使用其规则特别长的时候使用
re.finditer(ret) 得到的是一个迭代器的地址,想取里面每一个的内容还是加.group()
当收到的结果特别多的时候,节约内存,使用迭代器


关于分组,python在search里自动可以通过group(位置数)取相应的内容
而对于findall则默认取分组内的内容,想取消默认则在分组的左括号后面加上一个'?:'
给正则的内容加一个分组括号,就会保留切割的依据并把它单独列为列表的一项

search   返回是一个值需要.group来显示,无则None此时再group则报错,取分组的内容,直接ret.group(),括号内为数字或名,命名:在分组最前面?P加括号内name。
注:::这里有一种用法是,如果想截取一段头尾相同的字符串,则给前面的分组命名,然后后面的复用这个名字,后面的分组写成:?P等于前面的name,或者是用序号:1取第一组

原文地址:https://www.cnblogs.com/shachengcc1/p/11166145.html