python正規表示式re模組

2021-08-17 03:10:31 字數 4205 閱讀 8266

嗯~看看就好 小白可能會坑人 有錯誤的話麻煩指出來謝謝~~~

#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 函式是逐行匹配的。...