1.什么是正则表达式
定义:一种匹配字符串的规则
模块要经历的两个步骤:
a:要操作的概念本身,例如time,你只有了解了时间是什么才能去用它
生活中处处是正则,比如你说高级动物,你会想到人,那猪狗鸡鸭都排除了;
b:模块导入进行操作
c:可以定义一个规则:
来确定某一个字符串是否符合规则
从大段的字符串中找到符合规则的内容
d:正则表达式是一种独立的语法,和Python解释器无关;
2.什么地方用到正则表达式
a:爬虫领域:爬取网页,用正则表达式提取有用的信息;
b;登录注册也的表单验证,web开发
c:自动化开发,日志分析
3.正则表达式都包含什么
a:字符组:[字符组]在一个位c个字符组成的一个字符组;
用字符串中的每一个元素,跟[字符串组]中的元素比较,只要找到相同的就提取出来,提取出来之后
就直接从下一个开始比较,而不是从头开始;
b:字符[0-9](0到9的所有数字) [a-z](所有小写字母) [A-Z](所有大写字母)遵循ascii码
***注意当[0-9a-zA-Z]时要注意他们之间Ascii码的值大小,元素要从小到大;
c:元字符:
元字符 | 匹配内容 |
小数点. | 匹配字母以外的任意字符 |
\w | 匹配字母和数字或下划线 |
\s | 匹配所有的空白符(包括换行) |
\d | 匹配所有的数字 |
\D | 匹配所有的非数字 |
\S | 匹配所有的非空白符(包括换行) |
\W | 匹配f非字母和数字或下划线 |
\b | w\b前边界为w \bw后边界为w |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
a|b | 匹配字符a或b(bc|b 不能是b|bc找到一个之后就停了) |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
[字符组] | 匹配字符组的字符 |
[^字符组] | 匹配除了字符组中的字符 |
() | 匹配括号内的表达式,也表示一个组 |
#几个关于元字符的小知识点:
1)[\d\D]表示全局;所有的字符;
2)\b字符: 表示字符的前边界 字符\b后边界,以空白符为界;
3)^只匹配开头,$只匹配结尾,若连起来用,
效果如下:
2.量词
量词 | 用法说明 |
* | 重复多次和更多次 |
+ | 重复一次或更多次 |
? | 重复0次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
量词的一些小应用:1)一个量词只约束前面的一个或一组(括号里面的)字符;
2)元字符加量词?,表示匹配了0次或一次,?表示了匹配这个动作;
3)记忆窍门:?+*(?相当于0到1 +相当于1到无穷 *相当于0到无穷)
3.正则的贪婪匹配和惰性模式
贪婪匹配:尽可能多的匹配多个
例如:\d.?(先看元字符有几个,两个就是一次匹配两个字符)
\d.+(这个跟上面的区别就在于,\d.+不能是单个数字)
惰性模式:在量词后面加?代码惰性模式,匹配时会把元字符一直比较,找到了就停下,
而贪婪匹配用的是回溯算法,直接找到最后,然后往回找,找到停下;