這篇文章帶給大家的內容是關於python中正規表示式的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
正規
re = regular experssion
re 模組使 Python 語言擁有全部的正規表示式功能。
compile 函數根據一個模式字串和可選的標誌參數產生一個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。
作用: 對於字串進行處理, 會檢查這個字串內容是否與你寫的正則表達式匹配
如果匹配, 拿出匹配的內容;編寫正規的規則
pattern 匹配的正規表示式
string 要匹配的字串
三種查找方法
1). findall
import re str = 'hello sheen,hello cute.' pattern_1 = r'hello' pattern_2 = r'sheen' print(re.findall(pattern_1,str)) #['hello', 'hello'] print(re.findall(pattern_2,str)) #['sheen']
2).match
match嘗試從字串的起始位置開始匹配,
#如果起始位置沒有符合成功, 傳回一個None;
如果起始位置符合成功, 傳回一個物件;
import re str = 'hello sheen,hello cute.' pattern_1 = r'hello' pattern_2 = r'sheen' print(re.match(pattern_1,str)) #<_sre.sre_match> print(re.match(pattern_1,str).group()) #返回match匹配的字符串内容,hello print(re.match(pattern_2,str)) #None</_sre.sre_match>
3).search
search會掃描整個字串, 只傳回第一個符合成功的內容;
如果能找到, 傳回一個對象, 透過group方法取得對應的字串;
import re str = 'hello sheen,hello cute.' pattern_1 = r'hello' pattern_2 = r'sheen' print(re.search(pattern_1,str)) #<_sre.sre_match> print(re.search(pattern_1,str).group()) #hello print(re.search(pattern_2,str)) #<_sre.sre_match> print(re.search(pattern_2,str).group()) #sheen</_sre.sre_match></_sre.sre_match>
特殊字元類別
.: 匹配除了\n之外的任意字符; [.\n]
\d: digit--(數字), 匹配一個數字字符, 等價於[0-9]
\ D: 匹配一個非數字字符, 等價於[^0-9]
\s: space(廣義的空格: 空格, \t, \n, \r), 匹配單個任何的空白字符;
\S: 符合除了單一任何的空白字元;
\w: 字母數字或底線, [a-zA-Z0-9_]
\W: 除了字母數字或底線, [^a-zA- Z0-9_]
import re # . print(re.findall(r'.','sheen\nstar\n')) #['s', 'h', 'e', 'e', 'n', 's', 't', 'a', 'r'] #\d#\D print(re.findall(r'\d','当前声望30')) #['3', '0'] print(re.findall(r'\D','当前声望30')) #['当', '前', '声', '望'] #\s#\S print(re.findall(r'\s', '\n当前\r声望\t为30')) #['\n', '\r', '\t'] print(re.findall(r'\S', '\n当前\r声望\t为30')) #['当', '前', '声', '望', '为', '3', '0'] #\w#\W print(re.findall(r'\w','lucky超可爱!!')) #['l', 'u', 'c', 'k', 'y', '超', '可', '爱'] print(re.findall(r'\W','lucky超可爱!!')) #['!', '!']
#指定字元出現次數
符合字元出現次數:
*: 代表前一個字元出現0次或無限次; d*, .*
: 代表前一個字元出現一次或無限次; d
?: 代表前一個字元出現1次或 0次; 假設某些字元可省略, 也可以不省略的時候使用
第二種方式:
{m}: 前一個字元出現m次;
{m, }: 前一個字元至少出現m次; * == {0,}; ==={1,}
#{m,n}: 前一個字元出現m次到n次; ? === {0 ,1}
import re #* 代表前一个字符出现0次或者无限次 print(re.findall(r's*','sheenstar')) #['s', '', '', '', '', 's', '', '', '', ''] print(re.findall(r's*','hello')) #['', '', '', '', '', ''] #+ 代表前一个字符出现一次或者无限次 print(re.findall(r's+','sheenstar')) #['s', 's'] print(re.findall(r's+','hello')) #[] # ? 代表前一个字符出现1次或者0次 print(re.findall(r'188-?', '188 6543')) #['188'] print(re.findall(r'188-?', '188-6543')) #['188-'] print(re.findall(r'188-?', '148-6543')) #[] # 匹配电话号码 pattern = r'\d{3}[\s-]?\d{4}[\s-]?\d{4}' print(re.findall(pattern,'188 0123 4567')) #['188 0123 4567'] print(re.findall(pattern,'188-0123-4567')) #['188-0123-4567'] print(re.findall(pattern,'18801234567')) #['188-0123-4567']
練習--符合IP
可以從網路搜尋正規表示式產生器,使用別人寫好的規則,自己測試。
import re # | 表示或者 pattern = r'(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$' print(re.findall(pattern,'172.25.254.34')) #[('172', '25', '254', '34')] matchObj_1 = re.match(pattern,'172.25.254.34') if matchObj_1: print('匹配项:',matchObj_1.group()) #172.25.254.34 else: print('未找到匹配项') matchObj_2 = re.match(pattern,'172.25.254.343') if matchObj_2: print('匹配项:',matchObj_2.group()) else: print('未找到匹配项')
以上是python中正規表示式的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!