python 正規表示式 re模組

2022-07-21 22:45:21 字數 4033 閱讀 1988

re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none。

函式語法

re.match(pattern, string, flags=0)

引數說明:

pattern  要匹配的正規表示式

string    要匹配的字串

flags     標誌位,用於控制正規表示式的匹配方式,例如,是否要區分大小寫等等,參考正規表示式修飾符

例項

import

reprint(re.match('

abc','

abcdefghi

').span()) #

在起始位置匹配

print(re.match('

ghi','

abcdefghi

')) #

不在起始位置匹配

執行結果

(0, 3)

none

re.search 掃瞄整個字串並返回第乙個成功匹配。

函式語法

re.search(pattern, string, flags=0)

例項

import

reprint(re.search('

abc','

abcdefghi

').span())    #

在起始位置匹配

print(re.search('

ghi','

abcdefghi

').span())    #

不在起始位置匹配

執行結果

(0, 3)

(6, 9)

re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none;而re.search匹配整個字串,直到找到乙個匹配。

python 的 re 模組提供了re.sub用於替換字串中的匹配項。

語法

re.sub(pattern, repl, string, count=0, flags=0)

引數說明

例項

import re

phone_number='3-123-456-789'

#將'-'替換成'@'

number=re.sub('-','@',phone_number)

print('修改後的**號碼',number)

執行結果

修改後的**號碼  3@123@456@789

repl引數是乙個函式時

例項

import re

#將匹配到的數字乘3

def double(a):

c=int(a.group('c'))

return str(3*c)

print(re.sub('(?p\d+)',double,'asd-645-sa-4-da-87-ad-6'))

執行結果

asd-1935-sa-12-da-261-ad-18

compile 函式用於編譯正規表示式,生成乙個正規表示式( pattern )物件,供 match() 和 search() 這兩個函式使用。

語法格式為:

re.compile(pattern, [flags])

例項

import re

pattern = re.compile(r'\d+')

a = pattern.match('one12twothree34four',3,10) #從 1 開始查詢

print(f'')

b = pattern.search('one12twothree34four', 5, 15)#從 t 開始搜尋

print(f'')

執行結果

('12', (3, 5))

('34', (13, 15))

在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的,則返回空列表。

注意:match 和 search 是匹配一次 findall 匹配所有。

語法格式

findall(pattern, string, flags=0)

例項

import

rereg='

\d+'

print(re.findall(reg,'

1a2b3c4d5e6f7g

'))

執行結果

['1', '2', '3', '4', '5', '6', '7']

split 方法按照能夠匹配的子串將字串分割後返回列表

語法格式

re.split(pattern, string, maxsplit, flags)

引數maxsplite 

分割次數,maxsplit=1即分割一次,預設為0,不限制次數

例項

import re

str='1a2b3c4d5e6d7f'

print(re.split('[a-z]',str))

執行結果

['1', '2', '3', '4', '5', '6', '7', '']

re.matchobject

group() 返回被 re 匹配的字串。

修飾符描述

re.i

使匹配對大小寫不敏感

re.l

做本地化識別(locale-aware)匹配

re.m

多行匹配,影響 ^ 和 $

re.s

使 . 匹配包括換行在內的所有字元

re.u

根據unicode字符集解析字元。這個標誌影響 \w, \w, \b, \b.

re.x

該標誌通過給予你更靈活的格式以便你將正規表示式寫得更易於理解。

普通字元

匹配自身

.預設匹配除\n之外的任意乙個字元,若指定flag dotall,則匹配任意字元包括換行

^匹配字元開頭,若指定flags multiline,這種也可以匹配上(r"^a","\nabc\neee",flags=re.multiline)

$匹配字元結尾或e.search(r"^a","\nabc\neee",flags=re.multiline).group()也可以

*匹配*號前的字元0次或多次re.findall("ab*","cabb3abcbbac")  結果為['abb', 'ab', 'a'] 

+匹配前乙個字元1次或多次re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']

?匹配前乙個字元1次或0次

匹配前乙個字元m次

匹配前乙個字元n到m次re.findall("ab","abb abc abbcbbb") 結果'abb', 'ab', 'abb'] 

|匹配|左或|右的字元re.search("abc|abc","abcbabccd").group() 結果'abc' 

(...)

分組匹配re.search("(abc)a(123|456)c", "abcabca456c").group() 結果 abcabca456c

[...]

字符集,對應位置可以是字符集中的任意字元,字符集中的字元可以逐個給出也可以給出範圍,如[a-c]即[abc],[^abc]b表示取反即非abc

\a只從字元開頭匹配re.search("\aabc","alexabc") 是匹配不到的

\z匹配字元結尾同$

\d匹配數字0-9

\w匹配[a-za-z0-9]

\d匹配非數字

\w匹配非[a-za-z0-9]

\s匹配空白字元、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果為 '\t'

反斜槓作用:

萌新第一次發部落格,坐等大佬點評

python正規表示式re模組

嗯 看看就好 小白可能會坑人 有錯誤的話麻煩指出來謝謝 2018年3月15日13 54 11 re 模組 函式與方法的區別 如果是乙個函式,用類名去呼叫,如果是乙個方法,用物件去呼叫 1.compile函式 編 print n1 10 n import re pattern re.compile 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 字...