字符搜索
前面進行字符串的匹配都是使用的re.match()方法,此方法的不方便的地方在於,每次匹配都是從開頭進行的,要想找到裏面的某個元素需要前面加上 .* ,有沒有掃描全部的字符串而判斷元素是否存在的方式呢?re.search()就可以上場了
1)re.search(pattern, string, flags=0) → 掃描整個字符串並返回第一個成功的匹配
參數
pattern:匹配的正則表達式
string:要匹配的字符串。
flags:標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等
返回結果 - 和re.match()一致
匹配成功re.match方法返回一個匹配的對象,否則返回None。
可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式
通過span()方法用於以元祖形式返回匹配的起始位置和結束位置
re.match與re.search的區別
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配
示例
2)findall(pattern, string, flags=0) → 在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表
參數
pattern:匹配的正則表達式
string:要匹配的字符串。
flags:標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等
示例
字符替換
re.sub(pattern, repl, string, count=0, flags=0) → 替換字符串中的匹配項
參數
pattern : 正則中的模式字符串。
repl : 替換的字符串,也可爲一個函數。
string : 要被查找替換的原始字符串。
count : 模式匹配後替換的最大次數,默認 0 表示替換所有的匹配。
flags : 編譯時用的匹配模式,數字形式
示例
★★★相比於replace(),可以模糊匹配字符然後替換(等同於re.findall()返回的列表然後只用.join()的方法進行連接)
字符分割
re.split(pattern, string[, maxsplit=0, flags=0]) → 按照能夠匹配的子串將字符串分割後返回列表
參數
pattern 匹配的正則表達式
string 要匹配的字符串。
maxsplit 分隔次數,maxsplit=1 分隔一次,默認爲 0,不限制次數。
flags 標誌位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等
示例
延伸講一下,關於提取特殊信息
學習了正則表達式之後,對於要提取的數據,可以有多種的方式進行數據的提取,