四、正規表達式
正規表達式就是記錄文本規則的代碼
在python中使用正規表達式需要先導入re子產品
4.1比對單個字元
如:match_obj = re.match("t.o", "two")
if match_obj:
# 擷取比對結果
print(match_obj.group())
else:
print("比對失敗")
4.2比對多個字元
4.3比對開頭結尾
4.4比對分組
如:
# <html><h1>www.itcast.cn</h1></html>
match_obj = re.match("<([a-zA-Z1-6]+)><([a-zA-Z1-6]+)>.*</\\2></\\1>", "<html><h1>www.itcast.cn</h1></html>")
if match_obj:
print(match_obj.group())
else:
print("比對失敗")
4.5re子產品的進階用法
(1)search
根據正規表達式查找指定資料,隻查找一次結果
格式:re.search("正規表達式",“要比對的字元串”)
(2)findall
根據正規表達式查找指定資料,會全部查找,會傳回一個結果清單
格式:re.findall("正規表達式","要比對的字元串")
(3)sub
根據正規表達式查找指定資料,将比對到的資料進行替換,預設會全部替換,可用count=num進行指定替換次數
格式:re.sub("正規表達式","替換後的資料","要比對的字元串",count=1)
如:
# match_obj-》 sub函數比對完成以後會自動傳入該參數
def add(match_obj):
# 擷取比對結果
value = match_obj.group()
result = int(value) + 1
# 傳回資料類型必須是字元串
return str(result)
value = re.sub("\d+", add, "閱讀數:11")
print(value)
(4)split
根據正規表達式比對,進行切割字元串,并傳回一個清單,預設全部分割,可用maxsplit=num進行指定分割次數
格式:re.split("正規表達式", "要比對的字元串", maxsplit=1)
4.6貪婪和非貪婪
(1)貪婪:根據正規表達式盡量多比對資料,python裡面正則預設是貪婪的
提示:如果以後開發過程中使用正則比對資料比預想的資料要多,要想到非貪婪模式
(2)非貪婪:根據正規表達式盡量少比對資料
提示:?後面的資料不跟前面的正規表達式比對,留給後面的代碼進行比對
如:
match_obj = re.search(r"https?://.*?\.jpg", my_str)
if match_obj:
# 擷取比對結果對象
print(match_obj.group())
else:
print("比對失敗")
4.7r的作用
r:表示原始資料,不需要對反斜杠進行轉義,r裡面的反斜杠是一個真正反斜杠
建議:以後使用正規表達式可以統一加上r
轉義字元:用\來對字元進行轉義,如想查找*,就得寫成\*