python正則查詢 python正則匹配

2021-10-11 13:14:32 字數 4516 閱讀 5667

在python中使用正規表示式

一、搜尋和查詢與正則相匹配的內容

1、re.compile的用法

compile(pattern, flags=0)把正規表示式編譯為正規表示式物件

乙個正規表示式的例子,從字串string中找字元「the」出現的次數,不區分大小寫:

#!/usr/bin/env python3

#正規表示式與模式匹配

import re

string="the quick brown fox jumps over the lazy dog."

string_list=string.split()

pattern=re.compile(r"the",re.i)

#re.compile函式將文字形式的模式編譯成編譯後的正規表示式(即正規表示式的編譯)。

#r不是必須的,但是在正規表示式中使用原始字串是乙個好習慣

#re.i函式確保模式不區分大小寫。

count=0

for word in string_list:

if pattern.search(word):

print(pattern.search(word).string)

count+=1

print("the出現的次數:".format(count))

結果:the

thethe出現的次數:2

2、re.search()

search(pattern, string, flags=0)返回第乙個匹配到的物件,可以呼叫這個物件的 group()方法返回第乙個匹配到的值。沒有匹配上返回none。

查詢第一次出現字母的物件:

#!/usr/bin/env python3#正規表示式與模式匹配

importre

res1= re.search(r'[a-z]+', r'jiem098mib562qwe678')print('search', res1)print(res1.group())

結果:search jiem

3、re.match()

match(pattern, string, flags=0)和search用法一樣,唯一區別就是只在字串開始匹配

使用re.match方法,查詢以185開頭的**號碼

#!/usr/bin/env python3

#正規表示式與模式匹配

#re.match的使用

import re

string = "18512349553;18256785181;13698762112;18654320816;18511113141"

string_list = string.split(';')

count = 1

for word in string_list:

ret = re.match(r"^185\d$", word)

if ret:

print("第"+str(count)+"個位置可以匹配,匹配結果是:"+ ret.string)

else:

print("第"+str(count)+"個位置不能匹配")

count+=1

結果:第1個位置可以匹配,匹配結果是:18512349553

第2個位置不能匹配

第3個位置不能匹配

第4個位置不能匹配

第5個位置可以匹配,匹配結果是:18511113141

4、re.findall()

findall(pattern, string, flags=0)所有的匹配結果都返回在乙個列表中,如果沒有匹配上就返回乙個空列表.

使用re.findall的方法。

將數字取出:

#!/usr/bin/env python3#正規表示式與模式匹配:re.findall

importre

string="a list of groups; this is not 123 and 456"res= re.findall(r'[0-9]+', string)print(res)

結果:['123', '456']

5、finditer()

finditer(pattern, string, flags=0)根據正規表示式匹配字串得到 乙個迭代器,迭代器中每個元素都是乙個物件,每個物件都可通過 group()方法獲取對應的匹配值。(查詢)

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="928jkh568isd123hde547vcx"res= re.finditer(r'\d+', string)print(res)for each inres:print(each)

結果:二、切割和替換與正則相匹配的內容

1、sub()

sub(pattern, repl, string, count=0, flags=0)根據(pattern)正規表示式規則將匹配好的字串替換為新字串(repl),string為目標串,count可以指定替換次數

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="928jkh568isd123hde547vcx"res= re.sub(r'\d+', 'aaa',string)#\d匹配任何乙個非數字字元

print(res)

結果:928aaa568aaa123aaa547aaa

只替換前兩次匹配的結果:

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="928jkh568isd123hde547vcx"res= re.sub(r'\d+', 'aaa',string,2)#\d匹配任何乙個非數字字元

print(res)

結果:928aaa568aaa123hde547vcx

2、subn()

subn(pattern, repl, string, count=0, flags=0)根據(pattern)正規表示式規則將匹配好的字串替換為新字串(repl),string為目標串,count可以指定替換次數.

返回的結果是元組,其中有替換結果和替換次數

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="928jkh568isd123hde547vcx"res= re.subn(r'\d+', 'aaa',string)#\d匹配任何乙個非數字字元

print(res)

結果:('928aaa568aaa123aaa547aaa', 4)

將匹配次數設定為3,則:

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="928jkh568isd123hde547vcx"res= re.subn(r'\d+', 'aaa',string,3)#\d匹配任何乙個非數字字元

print(res)

結果:('928aaa568aaa123aaa547vcx', 3)

3、split()

split(pattern, string, maxsplit=0, flags=0)按照正規表示式匹配好的字串去切割目標字串,匹配對的結果會先拿第乙個結果切割目標串,

切割完後拿第二個結果切割這兩個字串,以此類推。可以指定最大切割次數,返回乙個列表。

以數字分割該字串:

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="928jkh568isd123hde547vcx"res= re.split(r'\d+', string)#\d匹配任何乙個數字字元

print(res)

結果:['', 'jkh', 'isd', 'hde', 'vcx']

最後展示乙個這些函式應用的示例:

#!/usr/bin/env python3#正規表示式與模式匹配

importre

string="我愛你

"res1= re.split(r'', string)#為匹配尖括號裡的a或反斜槓a

print(res1[1])print("…………")

res2= re.finditer(r'', string)#為匹配尖括號裡的字母數字或反斜槓的正則

for each inres2:print(each.group())print("…………")

res3= re.findall(r'', string)print(res3)print("…………")

res4= re.search(r'(?p\d+)\w+>(?p\d+)\w+>',string)print(res4.group('oo'))print(res4.group('nn'))print("…………")

res5= re.search(r'\w+)>(?p\w+)\w+>', r'hellohello')print(res5.group('tt'))print(res5.group('cc'))print(res5.group())

結果:我愛你']

我愛你我恨你a

hellohello

pytho遞迴查詢所有檔案

遞迴的作用 遞迴常用於查詢多級資料夾的操作。import os 匯入os模組 deffindall path if os.path.exists path 判斷位址是否存在 x os.listdir path 獲取檔案列表 for i in x endpath os.path.join path,i...

Python學習筆記 1 1 2 認識Python

一.課程目標 二.詳情解讀 1.初識pythonpython語言是一種高階程式語言,它於1991年由吉多.範羅蘇姆 guido van rossum 發明。目前主要應用於web開發 gui開發 網路爬蟲 資料科學 人工智慧等領域。python官方 python語言也是一種多正規化程式語言,即物件導向...

python實現演算法 kmp演算法python實現

kmp演算法python實現 kmp演算法 kmp演算法用於字串的模式匹配,也就是找到模式字串在目標字串的第一次出現的位置 比如abababc 那麼bab在其位置1處,bc在其位置5處 我們首先想到的最簡單的辦法就是蠻力的乙個字元乙個字元的匹配,但那樣的時間複雜度會是o m n kmp演算法保證了時...