需要 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()匹配物件函式來獲取匹配表示式,如果返回的是none,group()時會報錯
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 返回...