正則表達式:
正則表達式在線測試工具:https://regex101.com/
百度百科解釋正則表達式為正則表達式是對字符串操作的一種邏輯公式。
我們可以將正則表達式理解為一種規則,自己設定的一種規則,讓計算機根據這個規則來找到你需要的字符串。但是這個規則你怎么制定,當然不能瞎制定,對電腦說:”你給我找到這篇文章的所有包含劉德華的句子(字符串)!“,電腦當然不懂,所以我們下面交代一些符號,讓你正確的建立正則表達式,建立規則,讓電腦能幫你找到你想要的字符。
文末有正則表達式的最常見應用。
基本用法
- ?: 表示?前面的字符需要出現0次或一次。簡單來說就是?前面的字符可有可無。比如你輸入一個正則表達式tea?,那么計算機就會找到te,tel這樣的字符串。
- *:表示*前面的字符需要出現0個或多次。比如你輸入一個正則表達式ab*c,那么計算機就會找到ac,abc,abbbbbc這樣的字符串。
- +:表示+前面的字符需要出現1次以上。比如你輸入一個正則表達式ab+c,那么計算機就會找到abc,abbbbc這樣的字符串。
- {}:精確匹配:想匹配幾次就匹配幾次。比如你輸入一個正則表達式ab{6}c,那么計算機就會找到abbbbbbc這樣的字符串。你輸入一個正則表達式ab{2,6}c,那么計算機就會找到abbc,abbbc,abbbbc,abbbbbc,abbbbbbc這樣的字符串。ab{2,}c的話就是b出現兩次以上。
以上單個限定符規則就講完了,如果是想讓字符串出現一定次數的話,用()括起來就好了。比如(ab)+c,文章中ababababc等滿足規則的字符串就會被找到。
中級用法
或運算符:|,如a (baby|mom),文章就會找到a baby或a mom。
字符類:[],可以匹配由框內字符構成的字符串。比如制定正則表達式[alo]+,那么afsgsglo就可以被找到(匹配到),因為afsgsglo中包含alo。相對於()的區別就是它不講順序,只要存在即可。常用例子:[a-zA-Z0-9]+。
非運算符:^,一般放在表達式前面,表示除了他們以外的字符都可被匹配。比如你天生不能見到大寫字母,見到了就想吐,你就可以輸入正則表達式[ ^A-Z]+。
元字符:
| 編號 | 示例 | 說明 |
|---|---|---|
| 1 | . | 匹配除換行符以外的任何字符 |
| 2 | \d | 匹配數字:[0-9] |
| 3 | \D | 匹配非數字:[^0-9] |
| 4 | \s | 匹配空格字符:[\t\r\n\f] |
| 5 | \S | 匹配非空格:[^\t\r\n\f] |
| 6 | \w | 匹配單字字符: [A-Za-z0-9_] |
| 7 | \W | 匹配非單字字符: [ ^A-Za-z0-9_] |
匹配行首,如a,只能找到行首出現a的字符串。如afff。
$匹配行尾,如a$,只能找到行尾出現a的字符串。如llla。
高級用法:
貪婪匹配與懶惰匹配:
貪婪匹配就是匹配盡可能多。懶惰匹配就是匹配盡可能少。
如你想在
<div><span>hello world</span></div>
里匹配出標簽div和span。
我們不自覺地就想用<.+>,<>里面只要有東西就匹配。
但是最后的結果是:
共找到 1 處匹配:
<div><span>hello world</span></div>
我們將貪婪匹配轉為懶惰匹配,將正則表達式改為<.+?>,則最后結果為:
共找到 4 處匹配:
<div>
<span>
</span>
</div>
便完成了。
常見應用
正則表達式判斷密碼python代碼:
import re
lower = re.compile('[a-z]')
upper = re.compile('[A-Z]')
digit = re.compile('[0-9]')
wrong = re.compile('[^a-zA-Z0-9]')
while True:
password = input('請輸入大於8位的包含大小寫字母和數字的密碼:')
if len(password) < 8:
print('輸入的密碼小於8位')
elif wrong.search(password) != None:
print('包含無效字符')
else:
if lower.search(password) == None:
print('未包含小寫字母')
elif upper.search(password) == None:
print('未包含大寫字母')
elif digit.search(password) == None:
print('未包含數字')
else:
print('輸入成功')
break
