re模塊被稱為正則表達式,其作用為,創(chuàng)建一個“規(guī)則表達式”,用于驗證和查找符合規(guī)則的文本,廣泛用于各種搜索引擎、賬戶密碼的驗證等。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、鹽湖網(wǎng)站維護、網(wǎng)站推廣。
預(yù)定義字符:
\d:匹配所有的十進制數(shù)字0-9
\D:匹配所有的非數(shù)字,包含下劃線
\s:匹配所有空白字符(空格、TAB等)
\S:匹配所有非空白字符,包含下劃線
\w:匹配所有字母、漢字、數(shù)字a-z A-Z 0-9
\W:匹配所有非字母、漢字、數(shù)字,包含下劃線
特殊字符:
$:匹配一行的結(jié)尾(必須放在正則表達式最后面)
^:匹配一行的開頭(必須放在正則表達式最前面)
*:前面的字符可以出現(xiàn)0次或多次(0~無限)
+:前面的字符可以出現(xiàn)1次或多次(1~無限)
?:變"貪婪模式"為"勉強模式",前面的字符可以出現(xiàn)0次或1次
.:匹配除了換行符"\n"之外的任意單個字符
|:兩項都進行匹配
[ ]:代表一個集合,有如下三種情況
[abc]:能匹配其中的單個字符
[a-z0-9]:能匹配指定范圍的字符,可取反(在最前面加入^)
[2-9] [1-3]:能夠做組合匹配
{ }:用于標記前面的字符出現(xiàn)的頻率,有如下情況:
{n,m}:代表前面字符最少出現(xiàn)n次,最多出現(xiàn)m次
{n,}:代表前面字符最少出現(xiàn)n次,最多不受限制
{,m}:代表前面字符最多出現(xiàn)n次,最少不受
{n}:前面的字符必須出現(xiàn)n次
. 匹配除換行符外的任意字符
\d 匹配數(shù)字
\D 匹配非數(shù)字
\w 匹配數(shù)字字母下劃線,支持中文
\W 小寫w的反集
[abc] 匹配abc中任意一個
[a-f] 匹配字母a到f中的任意一個
x|y 匹配x或者y
^ 匹配字符串的開頭
$ 匹配字符串的結(jié)尾
{3,5} 匹配次數(shù),最少3個,最多5個
{3,} 至少匹配3次
* 匹配前一個字符,0次或多次
+ 匹配前一個字符,1次或多次
? 當(dāng)前面不是數(shù)量表達式時,代表匹配0次或1次
舉個栗子:
findall()函數(shù)的作用是匹配所有符合條件字符串,并以列表形式返回
由于.是匹配除換行符外的所有字符,{3,5} 匹配次數(shù),最少3個,最多5個,在默認的貪婪模式下會匹配最多的字符,所以在列表中,字母a開頭的字符串后面都跟了5個字符。
可以看到在非貪婪模式下,列表中的每一項都匹配最少的字符數(shù)。
從前往后,匹配到符合條件的最短的每一個字符串
邊界字符:
^ 限定開頭
$ 限定結(jié)尾
匹配分組:
() 提取出來的只有括號里匹配到的部分
上文中已經(jīng)用到這個方法了,返回匹配到的字符串列表,如果沒有匹配到的內(nèi)容,則返回空列表。
flags參數(shù)是可以省略的,不省略時代表具有其他特殊的功能,如忽略大小寫,忽略換行符等,re.S代表匹配時忽略換行符
re.search()和re.findall()的參數(shù)是一樣的,只是返回結(jié)果不同,如果匹配到了,就返回該結(jié)果的正則表達式對象;如果沒有匹配到,則返回None
使用re.search()返回匹配到的第一個字符串的正則表達式對象,找到了就會停止匹配。因此這個函數(shù)比較適合在一個大文本中找第一個出現(xiàn)的字符串。
若想讓這個字符串展示出來,還需要借助group()函數(shù)。
舉個栗子:
這個函數(shù)的作用是將正則表達式編譯為一個正則表達式對象,如果要多次使用這個正則表達式的話,可以先編譯,然后復(fù)用,使程序更高效一些,對這個對象繼續(xù)使用.match(string)就可以顯示匹配到的正則表達式對象,后續(xù)如果想要獲取具體內(nèi)容的話,和上面是一眼國的,直接使用group(0)就可以啦。
如果不考慮復(fù)用的話,和re.mach(pattern, string)的效果是一樣的。
從運行結(jié)果也可以看出,re.match()和re.search()的區(qū)別,雖然二者都會返回匹配到的正則表達式對象,但是re.match()是從字符串的最開始位置開始匹配的,如果最開始的字符不匹配則會直接返回None;而re.search()則會一直往后找,直到找到第一個符合條件的字符串。
re.sub()函數(shù)用于替換字符串中的匹配項
舉個栗子:
將所有數(shù)字替換為了一個空格。
re庫是python的標準庫
re庫采用raw string類型表示正則表達式,表示為:r'test'
原生字符串(raw string)是不包含轉(zhuǎn)義符的字符串
例子:
爬取好房通的網(wǎng)站 優(yōu)優(yōu)好房 的房源時用到了re庫解析文本,
raw string:
r'[1-9]\d{5}'
r'\d{3}-\d{8}|\d{4}-\d{7}'
string:
'[1-9]\\d{5}'
'\\d{3}-\\d{8}|\\d{4}-\\d{7}'
Re庫主要功能函數(shù)
re.search(pattern, string, flags=0)
pattern:正則表達式的字符串或原生字符串表示
string:待匹配字符串
flags:正則表達式使用時的控制標記
re.match(pattern,string,flags=0)
因為match為從開始位置開始匹配,使用時要加if進行判別返回結(jié)果是否為空,否則會報錯
re.findall(pattern,string,flags=0)
re.split(pattern,string,maxsplit=0,flags=0)
maxsplit為最大分割數(shù),剩余部分作為最后一個元素輸出
re.finditer(pattern,string,flags=0)
re.sub(pattern,repl,string,count=0,flags=0)
repl是用來替換的字符串,count為替換次數(shù)
Re庫的另一種等價用法
Re庫的函數(shù)式用法為一次性操作,還有一種為面向?qū)ο笥梅?可在編譯后多次操作
1regex?=?re.compile(pattern,flags=0)
通過compile生成的regex對象才能被叫做正則表達式
Re庫的match對象
Match對象的屬性
Match對象的方法
實例
Re庫的貪婪匹配和最小匹配
Re庫默認采取貪婪匹配,即輸出匹配最長的子串
re庫是python的標準庫
re庫采用raw string類型表示正則表達式,表示為:r'test'
原生字符串(raw string)是不包含轉(zhuǎn)義符的字符串
例子:
爬取好房通的網(wǎng)站 優(yōu)優(yōu)好房 的房源時用到了re庫解析文本,
raw string:
r'[1-9]\d{5}'
r'\d{3}-\d{8}|\d{4}-\d{7}'
string:
'[1-9]\\d{5}'
'\\d{3}-\\d{8}|\\d{4}-\\d{7}'
Re庫主要功能函數(shù)
re.search(pattern, string, flags=0)
pattern:正則表達式的字符串或原生字符串表示
string:待匹配字符串
flags:正則表達式使用時的控制標記
re.match(pattern,string,flags=0)
因為match為從開始位置開始匹配,使用時要加if進行判別返回結(jié)果是否為空,否則會報錯
re.findall(pattern,string,flags=0)
re.split(pattern,string,maxsplit=0,flags=0)
maxsplit為最大分割數(shù),剩余部分作為最后一個元素輸出
re.finditer(pattern,string,flags=0)
re.sub(pattern,repl,string,count=0,flags=0)
repl是用來替換的字符串,count為替換次數(shù)
Re庫的另一種等價用法
Re庫的函數(shù)式用法為一次性操作,還有一種為面向?qū)ο笥梅?可在編譯后多次操作
1regex?=?re.compile(pattern,flags=0)
通過compile生成的regex對象才能被叫做正則表達式
Re庫的match對象
Match對象的屬性
Match對象的方法
實例
Re庫的貪婪匹配和最小匹配
Re庫默認采取貪婪匹配,即輸出匹配最長的子串