正则模块:正则

所有程序员都要用到正则
爬虫方向要求对正则表达式掌握牢固
正则表达式:是一种客观存在的规则
re模块,是python提供的操作正则表达式的工具
正则表达式在所有语言中都是通用的
中括号在正咋中是字符集,只能正序,由小到大

.(点)是匹配除了换行以外所有字符
\w小写w匹配字母或数字或下划线
\s匹配任意的空白符
\n匹配一个换行符
\d匹配所有数字
\t匹配一个制表符
\b匹配一个单词的结尾
\^匹配字符串的开始   在字符集里面就是
\$匹配字符串结尾
\W大写的w  匹配非字母或数字或下划线
\ID匹配非数字
\S大写s匹配非空白符
\W\w 能匹配所有,互斥的

只要大写和小写就匹配所有字符

量词

*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}可以放数字可以放两个数字,重复N此
{n,m}重复n到m次

量词两条规则:
1.每一个量词只控制前一个字符的出现次数
2.这个量词的匹配为贪婪匹配模式    能匹配多次就不匹配零次
量词后面加问好就是惰性匹配,按少的匹配  将贪婪匹配模式改成非贪婪匹配模式
字符后面加量词,量词后面加问好才是控制匹配模式,问号可以单用

^放在字符集里面就是非什么什么就匹配

正则表达式中\是有意义的,如果想要在字符串中匹配一个\w的话,得在前面再加一个\,如果字符串里面的\w也是有特殊意义的
那么在正则表达式中要在加两个\  太麻烦
如果想要这样匹配的话,前面加个r加在字符串的分号前面,r功能取消python中所有转义符的功能。

正则贪婪匹配的本质:
回溯算法:先向后匹配然后再往回退再匹配

import re

re.findall()前面是正则表达式,后面是要匹配的字符串,返回的是列表,里面是字符串
直接返回匹配的列表,如果没找到就是空列表
re.search() 同上接收到的结果打印的时候要.group(),否则不行,匹配找到的第一个结果
都要用if先来判断是不是空内容来用  否则报错
re.match()同上 ,match会在自己判断时在开头加一个^,也是只返回匹配到的第一个结果,不过是从开头开始匹配

三个方法

在调用的角度上看,没有区别,接收两个参数按照位置传,正则表达式的字符串和待匹配的字符串
返回值的区别,findall返回列表,所有匹配值都出现在列表中,如果没有返回空列表,search如果匹配到结果就返回第一个匹配到的
如果没匹配到,返回none,匹配到的结果用group方法获取,match同search,不过必须要从开头匹配
re.split  按照正则表达式匹配结果分割
re.sub  和replace用法差不多,匹配结果来替换
re.subn  替换后告诉替换了几次
obj = re.compile('\d{3}')将正则表达式编译成为一个正则表达式对象,规则要匹配的是3个
ret = obj.search('abc123eeee')#正则表达式对象调用search,参数为待匹配的字符串
print(ret.group())结果123
re.finditer()返回一个迭代器  要用迭代器方法取值

re.findall会优先匹配括号分组内的数据,只显示分组里面的。如果想取消分组的话,要在分组开头写一个问号一个冒号
re.split优先级查询
如果对查询的条件进行分组,那么根据匹配结果分割的时候,结果也是可以保留下来的。
例如
ret = re.split('(\d)','egon3ioo4fkj)
这样的话3和4都可以保留下来
多个数据想取谁,先分组,然后给要取得东西取个名,前面加?P<>  尖角号里面放要取得数据的名
用已经存在的分组(?P=name)前面尖角号是创建这样一个分组,后面等于是用这个分组

分组

对多个字符进行整体的量词约束
对于一条匹配的正则,只对其中我需要的内容进行分组

正则表达式是一种字符串的筛选规则
re模块  是python提供的操作正则规则的模块