## **无所不能的正则**
<br>
### **1.什么是正则?为何无所不能?**
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。
<hr>
### **2.正则在改变我们**
尽管我们对正则一无所知,但是并不阻碍我们去简单的使用!
<img src="https://gitee.com/Wiliam01/img_all/raw/master/%E4%B8%BE%E4%B8%AA%E6%A0%97%E5%AD%90.jpg" width="200px" height="60px;">
Q&A:
我们在Win 系统中,可能会常常用到找文件的功能,假设你要找的文件很多,难以一个一个找到的时候,你该如何是好?
你很可能使用?和\*通配符来查找硬盘上的文件,?通配符匹配文件名中的 0 个或 1 个字符,而\*通配符匹配零个或多个字符。
```
>> dir 1??????.txt
1小狗子pdf.txt
1猪小明jpg.txt
```
使用\*字符代替?字符扩大了找到的文件的数量
```
>> dir *.txt
1小狗子pdf.txt
1猪小明jpg.txt
2三娃子png.txt
2四海子pdd.txt
```
尽管这种搜索方法很有用,但它还是有限的。通过理解 \* 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。
<hr>
### **3.复杂的开胃菜**
<img src="https://gitee.com/Wiliam01/img_all/raw/master/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.jpg" >
- ^为匹配输入字符串的开始位置。
- \[0-9\]+匹配多个数字,\[0-9\]匹配单个数字,+匹配一个或者多个。
- abc$匹配字母abc并以abc结尾,$为匹配输入字符串的结束位置。
<hr>
### **4.为什么使用正则表达式**
* 测试字符串内的模式。
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
* 替换文本。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
* 基于模式匹配从字符串中提取子字符串。
可以查找文档内或输入域内特定的文本。
<hr>
### **5. Python 正则表达式**
re 模块使 Python 语言拥有全部的正则表达式功能,re模块是自带的库,无需进行安装。
<br>
正则常见匹配模式,需要牢记于心:
| 模式 | 描述 |
| --- | --- |
| \w | 匹配字母数字及下划线 |
| \W | 匹配非字母数字下划线 |
| \s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
| \S | 匹配任意非空字符 |
| \d | 匹配任意数字,等价于 [0-9] |
| \D | 匹配任意非数字 |
| \A | 匹配字符串开始 |
| \Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
| \z | 匹配字符串结束 |
| \G | 匹配最后匹配完成的位置 |
| \n | 匹配一个换行符 |
| \t | 匹配一个制表符 |
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的末尾。 |
| . | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
| […] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’ |
| [^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
| * | 匹配0个或多个的表达式。 |
| + | 匹配1个或多个的表达式。 |
| ? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
| {n} | 精确匹配n个前面表达式。 |
| {n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
| a\|b | 匹配a或b |
| ( ) | 匹配括号内的表达式,也表示一个组 |
a