# 核心函式和方法
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函式可以對指定的字串進行遍歷匹配,獲取字串...