一、正則表達式概述
- 正則表達式使用單個字符串描述匹配符合某個規則的字符串
- 它是對字符串操作的一種邏輯公式
- 它的應用場景:處理文本和數據
- 匹配過程:依次拿出表達式和文本中字符比較,如果每個字符串都能匹配,則成功
二、re模塊
講到Python的正則表達式就不能不提到re模塊,引用re模塊的方法也非常簡單,直接import re 即可。
使用re模塊匹配曾則表達式的流程
- 生成pattern對象:調用re.compile(…)函數,只能通過這個才能生成pattern對象。
- 進行匹配:pattern.match(…)函數,將pattern對象與具體的字符串進行匹配。
- 得出結果。
注:在第一步編寫正則表達式的時候,通常習慣在正則表達式之前加一個r,例如:re.complie(r’\d+’),其中這個r表示原生字符串的意思,表示不轉義,即‘\‘就是代表‘\‘。
三、符號集介紹
- .:匹配任意一個字符(除了\n)
- […]:匹配字符集
- \d / \D :匹配數字 / 非數字
- \s / \S :匹配空白 / 非空白字符
- \w / \W :匹配單詞字符[a-zA-Z0-9] / 非單詞字符
- ?:匹配前一個字符集0次或者1次
- {m} / {m,n} :匹配前一個字符集m次 / m到n次
- ? / +? / ??:非貪婪模式,儘可能少地匹配子字符,舉個例子:現有字符串1bc,正則表達式爲[0-9][a-z]?時:只能匹配1,[a-z]最少爲0個;正則表達式爲[0-9][a-z]+?時:能匹配到1b,此時[a-z]中最少能匹配到1個;當爲第三種情況[0-9][a-z]??時:最多匹配到1。
- 下面爲邊界字符集:1、^:匹配字符串的開頭。2、 $:匹配結尾。3、\A / \Z :指定字符串必須出現在開頭或者結尾。例如:[1-9]?\d|100表示0-100的所有數字,包括邊界。
四、分組匹配
- |:匹配左右任意一個表達式(類似於或)。
eg:0-100表示爲 [1-9]?\d$|100
2.(ab):括號中表達式作爲一個分組
eg:[\w]{4,6}@(163|126).com:匹配163或者126
3.\<>:匹配標記語言,舉個例子
eg:’<([\w]+>)[\w]《/ \1’其可以匹配出Python,其中 \1:可以簡單理解成匹配分組內容([\w]+>):即’Book>’匹配到()裏面包含的東西
4.(?P):給分組起一個別名
5.(?P:):匹配名爲name的分組對應的字符串
五、re的方法
1.search(pattern ,String ,flags = 0):在一個字符串中查找匹配指定的字符串與find類似(固定特定字符串)
eg:Str1 = ‘imooc vedionum = 1000’ ; info = re.search(r’\d+’,Str1)
2.findall(pattern ,String ,flags = 0):找到匹配,返回所有匹配部分的列表,與find方法不同。
3.sub(pattern ,repl ,String ,count = 0 , flags = 0):將字符串匹配正則表達式的部分替換爲其他值。其中repl:既可以是字符串,也可以是函數名(返回值爲字符串)。就第二種情況舉個例子
eg:def add1(match):
val = match.group()
num = int(val) + 1
return str(num)
4.split(pattern ,String ,maxsplit = 0 ,flags = 0):根據匹配分割字符串,返回分割字符串組成的列表。