python內建模組之re模組

2022-09-10 10:06:13 字數 4471 閱讀 8487

在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 ...