正規表示式

2021-09-25 20:48:00 字數 4558 閱讀 6732

正規表示式,⼜稱正規表示式、正規表示法、正規表示式、規則表示式、常

規表示法(英語:regular expression,在**中常簡寫為regex、regexp或

re),是電腦科學的⼀個概念。正規表示式使⽤單個字串來描述、匹配

⼀系列匹配某個句法規則的字串。在很多⽂本編輯器⾥,正規表示式通常

被⽤來檢索、替換那些匹配某個模式的⽂本。

regular expression的「regular」⼀般被譯為「正則」、「正規」、「常規」。此處

的「regular」即是「規則」、「規律」的意思,regular expression即「描述某種規則

的表示式」之意。

import re

result = re.match(正規表示式, 要匹配的字串)

result.group() #返回匹配的結果

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

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

\d --------匹配數字,即0-9

\d --------匹配⾮數字,即不是數字

\s-------- 匹配空⽩,即 空格,tab鍵

\s --------匹配⾮空⽩

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

\w --------匹配⾮單詞字元

與⼤多數程式設計語⾔相同, 正規表示式⾥使⽤"\「作為轉義字元 ,這就可能造成反

斜槓困擾。假如你需要匹配⽂本中的字元」",那麼使⽤程式設計語⾔表示的正則

表示式⾥將需要4個反斜槓"\":前兩個和後兩個分別⽤於在程式設計語⾔⾥轉義

成反斜槓,轉換成兩個反斜槓後再在正規表示式⾥轉義成⼀個反斜槓。

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

+ 匹配前⼀個字元出現1次或者⽆限次,即⾄少有1次

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

匹配前⼀個字元出現m次

匹配前⼀個字元⾄少出現m次

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

^ 	匹配字串開頭

$ 匹配字串結尾

\b 匹配⼀個單詞的邊界

\b 匹配⾮單詞邊界

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

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

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

(?p) 分組起別名

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

匹配0-100

import re

ret = re.match(r"[1-9]\d$|100", "8").group()

print(ret)

需求:匹配出163、126、qq郵箱之間的數字

import re

ret = re.match(r"\w@(163|126|qq)\.com$", "[email protected]").group()

print(ret)

分組

import re

ret = re.match(r"([^-]*)-(\d+)", "023-12345678")

print(ret.group(0)) #返回所有分組的內容,括號裡也可不寫0

print(ret.group(1)) #返回第乙個分組

print(ret.group(2)) #返回第二個分組

ret = re.match(r"\w*", "123456")

# \1 表示和第乙個分組的內容一樣,內容不一樣不能匹配

分組別名

別名寫在分組的前面(?p正規表示式)

引用別名 (?p=name)

ret = re.match(r".*", "

")

檢索字串中的內容

ret = re.search(r"\w*", "test1135315 test2")

print(ret.group())

執行結果

search從左向右依次檢索,當匹配到第乙個滿足的條件時停止,不再向後檢索

和search類似,同樣是檢索內容

不同的是search匹配第乙個,findall匹配所有符合的內容

ret = re.findall(r"\w*", "test1135315 test2")

print(ret)

執行結果

注意:findall返回的是乙個列表

ret = re.sub(r"\d+", "50", "python = 111 php = 222")     #將數字替換成50

print(ret)

執行結果

import re

def fun(result):

# result += 50

return str(50) #返回時必須是字串型別的

ret = re.sub(r"\d+", fun, "python = 100, php = 200")

print(ret)

執行結果

import re

def fun(result):

num = result.group() #提取匹配的值

r = int(num) + 50

return str(r)

ret = re.sub(r"\d+", fun, "python = 100, php = 200")

print(ret)

執行結果

根據匹配進⾏切割字串,並返回⼀個列表

import re

ret = re.split(r",| ", "python = 100, php = 200")

print(ret)

執行結果

python⾥數量詞預設是貪婪的(在少數語⾔⾥也可能是預設⾮貪婪),總是

嘗試匹配盡可能多的字元;

⾮貪婪則相反,總是嘗試匹配盡可能少的字元。

解決⽅式:⾮貪婪操作符「?」,這個操作符可以⽤在"*","+","?"的後⾯,要求

正則匹配的越少越好。

import re

s = "this number is 023-6888-5555"

ret = re.match(r".+(\d+-\d+-\d+)", s)

print(ret.group(1))

**執行結果**

在正規表示式的後面加上 ?,可以讓他變成非貪婪模式

import re

s = "this number is 023-6888-5555"

ret = re.match(r".+?(\d+-\d+-\d+)", s)

print(ret.group(1))

執行結果

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

非負整數 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正規表示式 編寫正規表示式

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