嗯~看看就好 小白可能會坑人 有錯誤的話麻煩指出來謝謝~~~
#2023年3月15日13:54:11
#re 模組 函式與方法的區別
#"""如果是乙個函式,用類名去呼叫,如果是乙個方法,用物件去呼叫
"""#1.compile函式 (編)
print( "\n1" + "*****"*10 + '\n')
import re
pattern = re.compile(r'([a-z]+) ([a-z]+)',re.i)#用於編譯正規表示式,生成乙個pattern(模式)物件
m = pattern.match('hello world wide web',12,20)#match(string[, pos[, endpos]])
print(m)
print(m.group(0))#獲得整個匹配的子串
"""在python 3.6.4中輸出結果是:
<_sre.sre_match object; span=(12, 20), match='wide web'>
wide web
"""#2.match方法 (比賽)找到了乙個匹配的結果就返回
#match查詢字串的頭部(也可以指定起始位置)
#3.search方法 (搜尋)找到了乙個匹配的結果就返回
#search 方法用於查詢字串的任何位置
print( "\n3" + "*****"*10 + '\n')
import re
pattern = re.compile(r'\d([a-z]+)\d',re.i)
n = pattern.search('1one2 3two2 three3 four4')
print(n)
print(n.group(0))
"""在python 3.6.4中輸出結果是:
<_sre.sre_match object; span=(0, 5), match='1one2'>
1one2
"""import re
pattern = re.compile(r'\d+ ')
m = pattern.search('hello 831143 987654321')
print(m)
print(m.group(0))
"""在python 3.6.4中輸出結果是:
<_sre.sre_match object; span=(6, 12), match='831143'>
831143
"""#4.findall方法 (找到所有)以列表形式返回全部能匹配的子串
print( "\n4" + "*****"*10 + '\n')
import re
pattern = re.compile(r'\d')#r'\d+的輸出結果》['123456', '789']
pattern1 = re.compile(r'\d+')#[a-z]+的輸出結果》['one', 'two', 'three', 'four']
result1 = pattern.findall('helo 123456 789')#findall(string[, pos[, endpos]])
result2 = pattern1.findall('1one2 3two2 three3 four4')
print(result1)
print(result2)
"""在python 3.6.4中輸出結果是:
['12', '34', '56', '78', '9']
['1', '2', '3', '2', '3', '4']
"""#5.finditer方法 (劈開)返回乙個順序訪問每乙個匹配結果(match 物件)的迭代器
print( "\n5" + "*****"*10 + '\n')
import re
pattern = re.compile(r'\d+')
result = pattern.finditer('1one2 3two2 three3 four4')
print(result)
for i in result:
print('matching string:{},position:{}'.format(i.group(),i.span()))
"""在python 3.6.4中輸出結果是:
matching string:1,position:(0, 1)
matching string:2,position:(4, 5)
matching string:3,position:(6, 7)
matching string:2,position:(10, 11)
matching string:3,position:(17, 18)
matching string:4,position:(23, 24)
"""#6.spilt方法 (發揮)#能夠匹配的子串將字串分割後返回列表
print( "\n6" + "*****"*10 + '\n')
import re
p = re.compile(r'[\s\,\;\//]+')
print(p.split('a,b;;c //d'))#split(string[, maxsplit])
"""在python 3.6.4中輸出結果是:
['a', 'b', 'c', 'd']
"""#7.sub方法 (子)#用於替換
#repl為字串
print( "\n7(1)" + "*****"*10 + '\n')
import re
pattern = re.compile(r'(\w+) (\w+) (\w+)')#\w:匹配任意數字字母下劃線
s = 'hello 223 1,hello 456 1 ,hello 897 1'
print(pattern.sub(r'hello lily mary m',s))#sub(repl, string[, count])
print(pattern.sub(r'\3\1\2',s))
"""在python 3.6.4中輸出結果是:
hello lily mary m,hello lily mary m ,hello lily mary m
1hello223,1hello456 ,1hello897
注意(\w+)之間的空格
"""#repl為函式
print( "\n7(2)" + "*****"*10 + '\n')
import re
pattern = re.compile(r'(\w+) (\w+) (\w+)')
s = 'hello 223 1,hello 456 2 ,hello 897 3'
def func(m):
return 'hi' + ' ' + m.group(2)#group(3)代表的是變數s裡面的1,2,3
print(pattern.sub(func,s))
print(pattern.sub(func,s,1))
"""在python 3.6.4中輸出結果是:
hi 223,hi 456 ,hi 897
hi 223,hello 456 2 ,hello 897 3
"""#8.subn方法 用於替換,返回乙個元組
print( "\n8" + "*****"*10 + '\n')
import re
pattern = re.compile(r'(\w+) (\w+)')
s = 'hello 123, hello 456'
def func(m):
return 'hi' + ' ' + m.group(2)
print(pattern.subn(r'hello mary',s))
print(pattern.subn(r'\2\1',s))
print(pattern.subn(func,s,1))
"""在python 3.6.4中輸出結果是:
('hello mary, hello mary', 2)
('123hello, 456hello', 2)
('hi 123, hello 456', 1)
"""#9.回溯引用
print( "\n9" + "*****"*10 + '\n')
import re
s = r''#為s = r'
"""
Python 正規表示式 re模組
在python中,需要用到正規表示式時,就需要匯入re模組進行操作,們可以直接呼叫來實現正則匹配 普通字元 匹配自身 abcabc 匹配任意除換行符 n 外的字元 在dotall模式中也能匹配換行符 a.cabc 轉義字元,使後乙個字元改變原來的意思 a.c a c a.c a c 匹配前乙個字元0...
re模組 正規表示式 python
d 匹配數字 w 匹配字母或數字 s 匹配乙個空格 包括tab s 表示至少乙個空格 表示任意字元 包括零個 表示至少乙個字元 表示0個或1個字元 表示n個字元 表示n m個字元 可以匹配任意字元 a b 表示可以匹配a或b 行的開頭 d 表示必須以數字開頭 表示結尾 d 表示必須以數字結尾 r 字...
Python 正規表示式,re模組
1.re.findall 搜尋字串,以列表形式返回全部能匹配的子串,返回形式為陣列 findall pattern,string,flags 0 第乙個引數,正規表示式 第二個引數,搜尋的是哪些字串 第三個引數,匹配的模式,其中re.s使匹配包括換行在內的所有字元。findall 函式是逐行匹配的。...