在python要想使用正則必須借助於模組,re就是其中之一
查詢字串中所有匹配到的字元,並返回乙個列表,
沒有匹配資料則返回乙個空列表
import re
re.findall('正規表示式','帶匹配的文字') # 根據正則匹配除所有符合條件的資料
res = re.findall('b','eva jason jackson')
print(res) # ['a', 'a', 'a']
查詢字串中的指定的字元,匹配到乙個就立刻停止,並返回乙個物件,需要用group方法取值
res = re.search('正規表示式','帶匹配的文字') # 根據正則匹配到乙個符合條件的就結束
res = re.search('a','eva jason jackson')
print(res) # 結果物件
print(res.group()) # 正在的結果
if res:
print(res.group())
else:
print('不好意思 沒有找到')
如果沒有匹配到字元會返回乙個none,並且呼叫group後會報錯查詢字串中的指定的字元,只匹配開頭的字元,返回乙個物件,需要用group方法取值
res = re.match('a','abac') # 根據正則從頭開始匹配(文字內容必須在開頭匹配上)
print(res)
print(res.group())
if res:
print(res.group())
else:
print('不好意思 沒有找到')
如果沒有符合條件的資料 那麼match返回none 並且使用group會直接報錯類似字串的切割,不過這裡就算切割字母左右沒有字元也會切割出乙個空 ""
import re
先按'a'分割得到''和'bcd',在對''和'bcd'分別按'b'分割
res = re.split('[ab]','abcd')
print(res) # ['', '', 'cd']
類似字串內建方法的replace
# 類似於字串型別的replace方法
res = re.sub('\d','h','eva3jason4yuan4',1) # 替換正則匹配到的內容
res = re.sub('\d','h','eva3jason4yuan4') # 不寫預設替換所有
print(res) # evahjason4yuan4
替換完成後會返回乙個元組 ("更換後的字串", 被更換的個數)
"""返回元組 並提示替換了幾處"""
# res = re.subn('\d','h','eva3jason4yuan4',1)
# print(res) # ('evahjason4yuan4', 1)
# res = re.subn('\d','h','eva3jason4yuan4')
# print(res) # ('evahjasonhyuanh', 3)
定義乙個固定的正規表示式,可以多次重複使用匹配不同的字串
point = re.compile('(.*?)')
res1 = point.findall(date1)
res2 = point.search(date2)
res3 = point.match(date3)
res3 = point.finditer(date4)
regexp_obj = re.compile('\d+')
res = regexp_obj.search('absd213j1hjj213jk')
res1 = regexp_obj.match('123hhkj2h1j3123')
res2 = regexp_obj.findall('1213k1j2jhj21j3123hh')
print(res,res1,res2)
與findall的作用一致,但findall返回的是乙個列表,當資料量很大,會特別占用記憶體空間而finditer會返回乙個可迭代物件,當需要資料時,迭代獲取即可
# res = re.finditer('\d+','ashdklah21h23kj12jk3klj112312121kl131')
# print([i.group() for i in res])
# res = re.search('^[1-9](\d)(\d[0-9x])?$','110105199812067023')
# print(res)
# print(res.group()) # 110105199812067023
# print(res.group(1)) # 10105199812067
# print(res.group(2)) # 023
findall針對分組優先展示 無名分組
res = re.findall("^[1-9]\d(\d[0-9x])?$",'110105199812067023')
print(res) # ['023']
取消分組優先展示 無名分組
res1 = re.findall("^[1-9](?:\d)(?:\d[0-9x])?$",'110105199812067023')
print(res1)
res = re.search('^[1-9](?p\d)(?p\d[0-9x])?$','110105199812067023')
print(res)
print(res.group()) # 110105199812067023
print(res.group(1)) # 10105199812067 無名分組的取值方式(索引取)
print(res.group('***')) # 10105199812067
print(res.group('ooo')) # 023
1、登入紅牛官網 點選分支結構網頁2、如圖所示,爬取所有分公司名稱,位址,郵箱,**等資訊
4、新建py檔案,開啟並讀取網頁原始碼檔案,用正規表示式篩選分公司資訊
# 讀取帶匹配的資料
with open(r'a.txt', 'r', encoding='utf8') as f:
data = f.read()
# 利用正則匹配資料
# 分公司名稱
title_list = re.findall('', data)
# print(title_list)
# 分公司位址
address_list = re.findall("(.*?)
", data)
# print(address_list)
# 分公司郵箱
email_list = re.findall("(.*?)
", data)
# print(email_list)
# 分公司**
phone_list = re.findall("(.*?)
", data)
res = zip(title_list, address_list, email_list, phone_list)
for data_tuple in res:
print("""
公司名稱:%s
""" % (data_tuple[0], data_tuple[1], data_tuple[2], data_tuple[3]))
python模組 之 re模組
功能 實現python對正規表示式對支援與應用,將想要得到對內容按照正規表示式匹配出來 應用場景 爬蟲指令碼 對使用者輸入內容進行合規檢查 如qq格式檢查 等 功能 匹配物件中所有符合正規表示式的內容,並取出來 返回值 列表,所匹配到對項都會返回到列表中 import re content 1362...
python模組 re模組
匹配任意字元 匹配指定字元類別 字元開頭 字元結尾 取非字元 重複多次字元 0次或多次 重複多次字元 1次或多次 重複單次字元 左右表示式任意匹配 重複m到n次字元 重複m次字元 d 匹配任何十進位制數,相當於 0 9 d 匹配任何非數字字元,相當於 0 9 s 匹配任何空白字元,相當於 fdss ...
python常用模組之re模組(正則)
python種的re模組常用的5種方法,分別是re.match re.search re.findall re.split re.sub。在介紹五種方法之前,需要介紹一下正則的基礎。表示任意字元,除 n以為 轉義字元 字符集,表示取其中任意乙個字元。比如 abc d 可以匹配到ad bd cd。d ...