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