正規表示式

2021-08-20 06:59:58 字數 2660 閱讀 2270

字串是程式設計時涉及到的最多的一種資料結構,對字串進行操作的需求幾乎無處不在。比如判斷乙個字串是否是合法的email位址,雖然可以程式設計提取@前後的子串,再分別判斷是否是單詞和網域名稱,但這樣做不但麻煩,而且**難以復用。

正規表示式是一種用來匹配字串的強有力的**。它的設計思想是用一種描述性的語言來給字串定義乙個規則,凡是符合規則的字串,我們就認為它「匹配」了,否則,該字串就是不合法的。

在我們使用正規表示式之前,我們需要首先了解正規表示式的一些匹配規則,具體的規則如下:

###1.匹配單個字元

字元  功能

. 匹配任意1個字元(除了\n)

[ ] 匹配[ ]中列舉的字元

\d 匹配數字,即0-9

\d 匹配非數字,即不是數字

\s 匹配空白,即 空格,tab鍵,換行符\n

\s 匹配非空白

\w 匹配單詞字元,即a-z、a-z、0-9、_

\w 匹配非單詞字元

示例: ret =re.match('.','mll')

print(ret.group()) #m

ret3 = re.match('[hh]','hello world')

print(ret3.group()) #h

ret7 = re.match('\d\d\d', '44033')

print(ret7.group()) #440

字元  功能

* 匹配前乙個字元出現0次或者無限次,即可有可無

+ 匹配前乙個字元出現1次或者無限次,即至少有1次

? 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有

匹配前乙個字元出現m次

匹配前乙個字元出現從m到n次

示例: ret8 = re.match('[a-z][a-z]*','m')

print(ret8.group())#m

ret9 = re.match('[a-z][a-z]+','ma')

print(ret9.group()) #ma

字元  功能

^ 匹配字串開頭

$ 匹配字串結尾

示例: ret10 = re.match('^[a-z][0-9]*','m123456')

print(ret10.group()) #m123456

字元         功能

| 匹配左右任意乙個表示式

(ab) 將括號中字元作為乙個分組

\num 引用分組num匹配到的字串

(?p) 分組起別名

(?p=name) 引用別名為name分組匹配到的字串

示例: #11.匹配出163、126、qq郵箱

emails = ['[email protected]','[email protected]','[email protected]','[email protected]','[email protected]']

for email in emails:

ret19 = re.match('\w@(163|126|qq)\.com$',email)

if ret19:

else:

print('不合法:',email)

輸出結果如下:

@qq.com

不合法: 33

@163.com.cn

python提供re模組,包含所有正規表示式的功能。由於python的字串本身也用\轉義,因此我們強烈建議使用python的r(表示原生的字串)字首,就不用考慮轉義的問題了。

re.match()能夠匹配出以***開頭的字串,在上面第二節,我們基本使用的全部是這個模組。它返回的是乙個match物件,我們可以通過它的group()方法取出匹配的值。

ret8 = re.match('[a-z][a-z]*','m')

print(ret8.group()) #m

re.search()可以查詢字串中包含的值,返回的也是乙個match物件,我們可以通過它的group()方法取出匹配的值。

ret = re.search(r"\d+", "閱讀次數為 9999")

ret.group() #9999

re.findall()可以查詢字串中所有符合要求的值,返回的是乙個list

re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")

print(ret) #['9999', '7890', '12345']

re.sub() 可以將匹配到的資料進行替換,返回的是替換後的字串。

ret28 = re.sub(r'\d+','1200','python = 998')  

print(ret28)

re.split() 根據匹配進行切割字串,並返回乙個list

info = 'info:xiaozhang 33 shandong'

ret31 = re.split(r':| ',info)

print('啦啦',ret31)

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...