1. 程式人生 > >python初學者日記02(正則表達式)

python初學者日記02(正則表達式)

用戶名 電子 特殊 get 簡寫 else 文字 評論 邏輯

寫作時間: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(正則表達式)