python re模組 正規表示式

2022-04-13 02:06:22 字數 4774 閱讀 2180

需要  importre

\   轉義字元

[abc]   匹配中括號中的乙個字元

[a-c]   匹配a-c中的乙個字元

[a-dm-p] 匹配a-d或m-p中的乙個字元

.     除換行符\n 之外的任何單個字元匹配

\w    匹配乙個單詞字元 字母(包括a-z  a-z)、數字、下劃線

\w   匹配  除\w之外的其它字元

\s   匹配  任何空白字元,(包括 換行符\n、回車符\r、製表符\t、垂直製表符\v、換頁符\f)

\s    匹配 除\s之外的其它字元

\d    匹配數字(0--9)

\d    匹配  除\d之外的其它字元

\n   匹配換行符\n

\t    匹配製表符

\b   匹配單詞結尾        ab\b     以ab為結尾的單詞【邊界分隔符可以是

空格、逗號、-、句號】

\b    匹配非單詞邊界     比如 ab\b   不是以ab結尾的單詞

^    匹配字串開頭    ^gh  gh是字串的頭

[^x]   匹配除了x之外的任意字元,  非的意思

[^abc]   匹配除了abc三個字母之外的任意字元

$    匹配字串的尾   gh$   gh是字串的尾

ae|b    匹配ae或b   【先左後右  ab|abc 匹配ab不匹配abc】

()    分組  

按照左括號從左往右排序第一組 \1  以此類推   表示與第一組內容相同,後面的分組的內容跟這個相同時\1, 需要注意的是,有乙個隱含的全域性分組(就是0),就是整個正規表示式

(?p……)  除了原有的編號外,再指定乙個名稱,後面的分組的內容跟這個相同時(?p=name)

例子在findall    split   有分組優先

重複n次

重複n次或多於n次

重複 n -m次

?    重複n次   盡量少重複

?    重複n次或多於n次   盡量少重複

?    重複n-m次   盡量少重複

*  表示重複0次或多次

【盡量多的匹配  貪婪匹配】

*?    重複0次或多次   盡量少重複

+  重複1次或多次

【盡量多的匹配  貪婪匹配】

+?    重複1次或多次   盡量少重複

?     重複0次或1次   

注意量尺?  就是惰性匹配

.*?x   遇到x就停

r 後面的字元都是普通字元

?=    正向預查[正向條件匹配]   這個位置滿足條件的就匹配,不滿足條件就不匹配    

例 \d-\d (?=microsoft)    microsoft不會顯示出來

?!     負正向預查 [非正向條件匹配]    這個位置滿足條件的就不匹配,不滿足條件就匹配    

例 \d-\d (?!microsoft)       microsoft不會顯示出來

?<=   反向預查    這個位置滿足條件的就匹配,不滿足條件就不匹配  

例  (?<=girl) \d-\d      條件在前頭

|   或

從左往右匹配   左邊一旦匹配不在匹配右邊,所以把長的放左邊

正則方法:

標誌位re.i 忽略大小寫

re.l 表示特殊字符集 \w, \w, \b, \b, \s, \s 依賴於當前環境

re.m 多行模式,會影響^ $,每一行都是乙個新的開頭和結尾

re.s 即為' . '並且包括換行符在內的任意字元(' . '不包括換行符)

re.u 表示特殊字符集 \w, \w, \b, \b, \d, \d, \s, \s 依賴於 unicode 字元屬性資料庫   預設設定

re.x 為了增加可讀性,忽略空格和' # '後面的注釋   

compile 函式

用於編譯正規表示式,生成乙個正規表示式物件

語法格式為:p=re.compile(pattern[, flags])

引數1   pattern : 乙個字串形式的正規表示式

引數2   flags 可選,標誌位

表示匹配模式,比如忽略大小寫,多行模式等

findall

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

語法格式一:s=re.findall('\d','liming tan23guwu468zhong')

引數1   正規表示式

引數2   字串

注意:findall函式的正規表示式中如果有(),預設優先匹配()內;要取消分組優先在組內加?:

例子 s=re.findall('www.(?:baidu|oldboy).com','jhgfwww.oldboy.comhgffd')  

可以給分組起名 (?p《名字》\d+)

re.finditer

和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並把它們作為乙個迭代器返回

引數1   正規表示式

引數2   字串

引數3  可選  標誌位

返回值是乙個物件迭代器,每個物件需要group()才能拿到結果

例子s=re.finditer('\d+','adff34lkjhg87nhbvf90')

for i in s:

print(i.group())

語法格式二:s=p.findall('2345lm0987ming654abc87654',5,18)

p 正則物件

引數1   字串

引數2   起始位置

引數3   結束位置(不包括)

例子     s=p.findall('2345lm0987ming654abc87654',5,18)

re.search方法

掃瞄整個字串並返回第乙個成功的匹配

函式語法:re.search(pattern, string, flags=0)

引數1   正規表示式

引數2   要匹配的字串

引數3    可選引數   標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等

匹配成功re.search方法返回乙個匹配的物件,否則返回none

我們可以使用group()匹配物件函式來獲取匹配表示式,如果返回的是nonegroup()時會報錯

group()  可以加乙個引數(組號),組號就是正規表示式的分組的序號

第乙個()序號是1

例子s=re.search(r'[a-z]+','2345lm098kh7654abc87654')

if s !=none:

ss=s.group()

print(ss)

re.match函式

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

匹配成功返回乙個匹配的物件我們可以使用group()匹配物件函式來獲取匹配表示式

如果返回的是none,group()時會報錯

例子s=re.match(r'[a-z]+','b2345lm098kh7654abc87654')

if s !=none:

ss=s.group()

print(ss)

re.split   分割

能夠匹配的做為分隔符,分割後返回列表

語法  s=re.split(pattern, string[, maxsplit=0, flags=0])

引數1  正規表示式

引數2  字串

引數3  可選   分隔次數,maxsplit=1 分隔一次,預設為 0,不限制次數

引數4  可選   標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等

注意:分組功能

如果有(),會保留()組內分隔符

例子s=re.split('(\d+)','adjg24kjbvc76lkjh89uytrc94mhb')

結果 ['adjg', '24', 'kjbvc', '76', 'lkjh', '89', 'uytrc', '94', 'mhb']

re.sub用於替換字串中的匹配項

語法:s=re.sub(pattern, repl, string, count=0)

引數1  正規表示式   滿足正則的被替換

引數2  替換的字串,也可為乙個函式

引數3  原字串

引數4  替換的最大次數,預設 0 表示替換所有的匹配

返回替換後的字串

s=re.subn('\d','|','liming2lixueqian8李明')

引數1  正規表示式   滿足正則的被替換

引數2  替換的字串,也可為乙個函式

引數3  原字串

引數4  替換的最大次數,預設 0 表示替換所有的匹配

返回乙個元組

元組的第一項就是替換後的字串   第二項是被替換的次數

\d+\.?\d*            數值

天子驕龍

Python re模組正規表示式

本文建議有一定正則基礎的看 正規表示式可以包含普通或者特殊字元。絕大部分普通字元,比如 a a 或者 0 都是最簡單的正規表示式。它們就匹配自身。有些字元,比如 或者 屬於特殊字元。特殊字元既可以表示它的普通含義,也可以影響它旁邊的正規表示式的解釋。重複修飾符 等 不能直接巢狀。這樣避免了非貪婪字尾...

python re模組(正規表示式)

re 模組的使用 1.使用compile 函式編譯乙個parttern物件,例如 parttern re.compile r d 2.通過pattern物件提供的一系列屬相和方法,對文字進行匹配查詢,獲得結果,即乙個match物件 3.使用match物件的屬相和方法獲取資訊 match.group ...

正規表示式 python re正則模組

python內建模組連線 re d w s 等解釋 快速使用 多行匹配 re.dotall 查詢 findall re.compile findall xml line 0 返回列表 match re.compile match xml line 返回第乙個,不搜尋新行,match group 返回...