Python語言基礎20 re模組的核心函式和方法

2021-10-05 18:39:30 字數 3441 閱讀 3264

# 核心函式和方法

import re

# match 函式

# 嘗試用正規表示式從字串的開頭匹配,

# 如果匹配成功,則返回乙個匹配物件,否則返回none

m1 = re.match(

'fo'

,'food'

)# 匹配

m2 = re.match(

'fo'

,'nfood'

)# 不匹配

print

(m1)

print

(m2)

# search 函式

# 在字串中,查詢正規表示式模式的第一次出現,

# 如果匹配成功,則返回乙個匹配物件,否則返回none

s1 = re.search(

'foo'

,'food'

)s2 = re.search(

'fo'

,'nsfood'

)# 可以匹配到中間的字元

print

(s1)

print

(s2)

# group方法

# 使用match或search匹配成功後,

# 返回的匹配物件可以通過group方法獲得匹配內容

print

(m1.group())

print

(s1.group())

# findall 函式

# 在字串中查詢正規表示式模式的所有(非重複)出現;返回乙個匹配物件的列表

f = re.findall(

'foo'

,'seafood is food'

)# 匹配所有匹配項

m3 = re.search(

'foo'

,'seafood is food'

)# 匹配第一次出現的foo

print

(f)print

(m3.group())

# finditer 函式

# 和findall() 函式有相同的功能,

# 但返回的不是列表而是迭代器,對於每乙個匹配,該迭代器返回乙個匹配物件

f2 = re.finditer(

'fo'

,'seafood is food'

)for item in f2:

print

(item.group())

# compile 函式

# 對正規表示式模式進行編譯,返回乙個正規表示式物件

# 不是必須要用這種方式,但是在大量匹配的情況下,可以提公升效率

c = re.

compile

('foo'

)c2 = c.match(

'food'

)print

(c2.group())

# split 方法

# 根據正規表示式中的分隔符把字元分割為乙個列表,並返回成功匹配的列表

# 字串也有類似的方法,但是正規表示式更加靈活

mylist = re.split(

'\.|-'

,'hello-world.data-python'

)print

(mylist)

# sub 方法

# 把字串中所有匹配正規表示式的地方替換成新的字串

s3 = re.sub(

'x',

'x mr.james'

,'dear x'

)print

(s3)

編寫count_patt.py指令碼,實現乙個apche日誌分析指令碼

統計每個客戶端訪問apache伺服器的次數

將統計資訊通過字典的方式顯示出來

分別統計客戶端是firefox和msie的訪問次數

分別使用函式式程式設計和物件導向程式設計的方式實現

# 分析apache 訪問日誌

import re

import collections

# 方法一

# fname 檔案位址,patt 正規表示式

defcount_patt

(fname,patt)

: counter = collections.counter(

) cpatt = re.

compile

(patt)

with

open

(fname)

as fobj:

for line in fobj:

m = cpatt.search(line)

if m:

counter.update(

[m.group()]

)return counter

if __name__ ==

"__main__"

: fname =

'access_log.txt'

ip_patt =

'^(\d+\.)\d+'

a = count_patt(fname,ip_patt)

print

(a) br_patt =

'firefox|msie|chrome'

b = count_patt(fname,br_patt)

print

(b)# 方法二

class

countpatt

:def

__init__

(self,patt)

: self.cpatt = re.

compile

(patt)

defcount_patt

(self,fname)

: counter = collections.counter(

)with

open

(fname)

as fobj:

for line in fobj:

m = self.cpatt.search(line)

if m:

counter.update(

[m.group()]

)return counter

if __name__ ==

"__main__"

: fname =

"access_log.txt"

ip_patt =

"^(\d+\.)\d+"

br_patt =

"firefox|msie|chrome"

ip = countpatt(ip_patt)

print

(ip.count_patt(fname)

) br = countpatt(br_patt)

print

(br.count_patt(fname)

)

正則語言RE基礎

使用單個字串來描述匹配一系列符合某個句法規則的字串,regular expression 破兩提取 替換 在高階文字編譯器中 在開發語言總使用驗證輸入輸出 使用者輸入的合法性驗證 爬蟲。1.元字元 如果就是想要匹配.或者?可以使用轉義字元 來將特殊字元轉普通字元 用來表示注釋 分行 來表示,這個我個...

python基礎 re使用

以乙個帶檔案操作的例子說明 目標 開啟乙個檔案,提取 中的內容,儲存在乙個新的檔案裡 涉及到的一些操作 序號操作 1檔案操作codecs.open 2正規表示式re模組的使用 上 import linecache import re import codecs filename lolstatist...

python基礎 Re正則

正規表示式 regular expression,簡稱re 正規表示式是對字串操作的 種邏輯公式,就是 事先定義好的 些特定字元 及這些特定字元的組合,組成 個 規則字串 這個 規則字串 來表達對字串的 種過濾邏輯。字串的匹配查詢 re模組中的findall函式可以對指定的字串進行遍歷匹配,獲取字串...