正則one

什麼是正則?

正則就是表達式,用於數據的提取。

re模塊的簡單使用

在這裏插入圖片描述
從左到右進行匹配,apple的每一個字母都可以匹配上
即使後面再寫很多的東西

在這裏插入圖片描述
也可以匹配上apple,後面的匹配不上就不管了
在這裏插入圖片描述
從左到右進行匹配,第一個字母都匹配不上,所以就不會再往下進行匹配

import re
pattert = re.compile('apple')#規則
result = pattert.match('apple17189208888')#裏面寫很多東西,然後規則來匹配
print(result)



##直接寫
result = re.match('apple','apple171788')
#第一個參數表示規則,要匹配的東西
#第二個是規則要去匹配的語句

print(result)

第一個寫的好處是,一套規則可以多處使用
第二個便潔

正則之代表字符

.表示可以匹配任意字符(除了\n)

在這裏插入圖片描述
可以看到只匹配了一個a,(因爲從左到右匹配)
如果想全部打印出來的話

在這裏插入圖片描述
就可以寫5個點,可以看到返回了apple
如果直接想看到結果,不想看到這些東西,可以使用group

group表示可以直接取到匹配的值,但是要做判斷。

在這裏插入圖片描述
可以看到返回的只有apple
但是如果匹配不到值的話,是會報錯的

在這裏插入圖片描述
在apple裏面找1,肯定是找不到的,這個時候用ggroup,是會報錯的,所以最好先判斷一下

import re
result = re.match('1','apple')
if result:#如果有返回值的話,再去打印
    print(result)
.匹配不上\n(\n表示換行)

result = re.match('.','\n')
print(result)

顯示的結果是
在這裏插入圖片描述
直接返回的none,如果想匹配\n的話

在這裏插入圖片描述
直接寫上\n規則就好

匹配小數(\轉義)

小數點在正則裏面是有意義的,所以想要匹配小數,就得用轉義,告訴他,這就是一個小數點
\表示轉義,在小數點前面加上\就歐克了

在這裏插入圖片描述

[]表示匹配其中的任意一個字符

[]不管有多少字符,就只能匹配其中的一個

在這裏插入圖片描述
可以看到返回的結果只有一個1

[]中的.只是一個普通的.,沒有任何的意義
[a-z]表示匹配從a到z的 任意一個 字符
[a-z0-9]表示匹配 從a到z或者從0到9的 任意一個 字符
[a-z0-9-]表示匹配從a到z 或者從0到9 或者- 的任意一個字符
[a-z]表示匹配 a - z這三個字符當中的任意一個

** 因爲\可以轉義 ,加上它之後-就沒有了意義**

[[]]表示要匹配 [ ] 中的任意一個
在[]裏面的^表示取反的意思,它本身代表以什麼開頭,如下例子

import re
result = re.match('[^5]','5')
#前面的規則是除了5   後面就只有一個5 
print(result)

結果
在這裏插入圖片描述
可以看到5是匹配不上的,除了5,任意的一個字符都可以匹配上

re裏面的\d(可以匹配一位數字) \D(匹配非數字,一個\D能匹配一個)

在這裏插入圖片描述
因爲\d表示匹配一位數字,\d\d這個規則表示要匹配兩位數字,但是後面的句子中只有一位數字,所以返回none

\D表示匹配任意一個不是數字的字符,比如
在這裏插入圖片描述

\D匹配的數量也是一個 匹配的是非數字

re裏面的\s(匹配一個空格和Tab鍵) \S(匹配非空白,匹配數量也是一個)

re.match('愛\s情','愛 情')表示匹配愛 情

\S只要不是空格就行

re裏面的w和W

w匹配非特殊字符,比如a-z、0-9、漢字、_
W匹配特殊字符,比如非字母、非數字、非漢字、非_,它可以支持空格、表情等

原始字符串

r可以消除特殊字符的意義

import re
s = '呵\n呵'
result = re.match(r'呵\n呵',s)
print(result)

結果
在這裏插入圖片描述
\n是換行符,但是前面加上r就沒用意義了
再比如

import re
result = re.match(r'.','...')
print(result)

結果
在這裏插入圖片描述
.在正則裏面表示匹配除了\n之外的任意一個字符,但是前面加上r之後,.就沒有了意義

r的原理

在這裏插入圖片描述
*r就相當於在有意義的字符前面加了反義字符*

正則之代表數量

*代表 0次 或者 無數次

import re
result = re.match('\d*','a')
print(result)

雖然\d是匹配數字的,但是*代表0或者無數,所以運行結果不會返回none
在這裏插入圖片描述
匹配的到是一個’'空字符串

+表示 1次 或者 無數次

在這裏插入圖片描述

?表示 0次 或者 1次

import re
result = re.match('\d?','123456')
print(result)

結果只能匹配到1
在這裏插入圖片描述
?表示0和1次,所以


import re
result = re.match('\d?','a')
print(result)

運行結果也是和*一樣的
在這裏插入圖片描述

{n}表示 n次

import re
result = re.match('\d{9}','1234')
print(result)

運行結果
在這裏插入圖片描述
因爲最少要出現9個數字,後面的數字不足9個,所以匹配不上

{n,}表示 最少n次

{n,m}表示 n到m次,注意包括n和m

小練習:匹配一個手機號

import re
result=re.match('1[3456]\d{9}','138357510698756')
print(result)

運行結果
在這裏插入圖片描述

代表邊界,分組在正則two裏面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章