python初學者日記02(正則表達式)
寫作時間:2018/12/17
作者:永遠的碼農(博客園)
一.正則表達式簡介:
正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。
正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,模式描述在搜索文本時要匹配的一個或多個字符串。
二.python正則表達式中的特殊字符以及轉義字符的用法
特殊字符 | 描述 |
^ | 表示匹配的字符必須在最前面 |
$ | 與^類似,匹配最末的字符 |
* | 匹配*前面的字符0次或n次 |
+ | 匹配+前面的字符1次或n次 |
? | 匹配?前面的字符0次或1次 |
. | 匹配除了\n外的所有字符 |
(x) | 匹配x並且記錄匹配的值 |
x|y | 匹配x或者y |
{n} | n是正整數,匹配前面的n個字符 |
{n,} | 匹配前面至少n個字符 |
{n,m} | 匹配前面至少n個至多m個字符 |
[xyz] | 匹配列表中列出的任一字符,可以用連字符 - 指出字符範圍 |
[b] | 匹配一個空格 |
b | 匹配一個單詞的分界線,比如一個空格 |
B | 匹配一個單詞的非分界線 |
轉義字符 | 描述 |
\d | 匹配數字,即0-9 |
\D | 匹配非數字 |
\s | 匹配空白,比如空格,tab |
\S | 匹配非空白 |
\w | 匹配非特殊字符,即a-z、A-Z、0-9、_、漢字 |
\W | 匹配特殊字符,即非字母、非數字、非漢字、非_ |
初級正則表達式常見使用:
1.匹配有效的正整數
正則表達式: [1-9]+[0-9]*
典例: 找出一個文本文件中所有有效的正整數(00123這樣的視為無效,12300視為有效)
先創建一個文本文件new.txt,內容如下:
aaddccbbee 0012300 45600 78909 abcd1234efgh 12340 ghijkl 12 34 056 780 0099 12340056aabbcc00
1 import re 2 file = open("new.txt") 3 for line in file: 4 list = re.findall("[1-9]+[0-9]*",line) 5 print("findall()返回列表為:",list) 6 for num in list: 7 print(num)
執行結果: findall()返回列表為: [‘12300‘, ‘45600‘, ‘78909‘] 12300 45600 78909 findall()返回列表為: [‘1234‘, ‘12340‘] 1234 12340 findall()返回列表為: [‘12‘, ‘34‘, ‘56‘, ‘780‘, ‘99‘] 12 34 56 780 99 findall()返回列表為: [‘12340056‘] 12340056
2.匹配有效的負整數
正則表達式: -[1-9]+[0-9]*
3.匹配有效的整數
正則表達式: -?[1-9]+[0-9]*|0
4.匹配浮點數
正則表達式: -?[0-9]+\.[0-9]+
典例: 找出文本文件new.txt中的所有浮點數
文本文件內容如下:
aaddccbbee 456 078 -7780 9.99654 abcd1234efgh -12340 ghijkl 33.0 12 -34 056 780 0099 -2 0 2.23 -3.8 12340056aabbcc0.123
1 import re 2 file = open("new.txt") 3 for line in file: 4 list = re.findall("-?[0-9]+\.[0-9]+",line) 5 print("findall()返回列表為:",list) 6 for num in list: 7 print(num)
執行結果: findall()返回列表為: [‘9.99654‘] 9.99654 findall()返回列表為: [‘33.0‘] 33.0 findall()返回列表為: [‘2.23‘, ‘-3.8‘] 2.23 -3.8 findall()返回列表為: [‘0.123‘] 0.123
5.匹配由數字、26個英文字母組成的字符串
正則表達式: [0-9a-zA-Z]+
高級正則表達式常見使用:
1.輸入用戶名只能是漢字,且字數位於3~10之間
正則表達式: ^[\u4e00-\u9fa5]{3,10}$
典例:驗證用戶輸入名是否滿足如上要求
1 import re 2 input = input("請輸入用戶名:") 3 if re.match("^[\u4e00-\u9fa5]{0,}$",input): 4 print("用戶名有效") 5 else: 6 print("用戶名無效")
測試效果:
請輸入用戶名:王老二
用戶名有效
請輸入用戶名:張三
用戶名無效
請輸入用戶名:lyj來了喔
用戶名無效
2.輸入密碼開頭必須是英文字母,其他部分只能是數字,下劃線_或字母,且長度為6~12位
正則表達式: [a-zA-Z]{1}[a-zA-Z0-9_]{5,11}
3.電子郵箱驗證
正則表達式: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
正則表達式並不是唯一的,不同的正則表達式可以達到相同的匹配要求......
本人也是初學python,這篇隨筆其中有的地方肯定有不好的地方,如果你有什麽建議或發現什麽錯誤,歡迎在下面評論區提出,如果你覺得鄙人寫得還不錯,請各位客官動動小手點個推薦??吧!
python初學者日記02(正則表達式)