## **無所不能的正則**
<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