欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python正則表達(dá)式經(jīng)典入門教程

 更新時(shí)間:2017年05月22日 10:56:38   作者:erlang_hell  
這篇文章主要介紹了Python正則表達(dá)式,結(jié)合具體實(shí)例形式歸納總結(jié)了Python正則表達(dá)式中常用的各種函數(shù)與相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例總結(jié)了Python正則表達(dá)式基本用法。分享給大家供大家參考,具體如下:

正則表達(dá)式在平時(shí)做文本處理(爬蟲程序去解析html中的字段,在分析log文件的時(shí)候需要抓取一些關(guān)鍵數(shù)據(jù))的時(shí)候經(jīng)常會用到。一般我們會使用到Python的re庫。如果正則表達(dá)式自己代碼中反復(fù)被用到的時(shí)候,我們可以將這個(gè)正則表達(dá)式使用re.compile函數(shù)轉(zhuǎn)換成一個(gè)object方便調(diào)用。

match

將輸入的字符串從第一個(gè)字符開始匹配,如果不匹配將會直接返回空。

search

和match不同,search能自由的在字符串中任一開始位置開始匹配,直到匹配上了。

re中的選項(xiàng)

通常在flag里面可以設(shè)置.

re.I 忽略掉大小寫
re.L 讓\w,\W,\b,\B,\s和\S做本地化識別
re.M 當(dāng)匹配的時(shí)候支持多行匹配.
re.DEBUG 顯示正則表達(dá)式的調(diào)試信息
re.S 讓.號匹配本行的全部字符。

sub 替換

import re
phone='188-88-88 # this is my phone number'
num = re.sub(r'#.*$','',phone)
# num ==188-88-88
num = re.sub(r'\D','',phone)
# num = 1888888

還能使用這個(gè)來做代碼的轉(zhuǎn)義,有點(diǎn)像在 sublime text里面使用的查找替換。比如說我需要將C語言里面的宏定義轉(zhuǎn)換成lua里面的變量定義

import re
print( re.sub( r'#define\s+([a-zA-Z_]+)\s+([a-zA-Z_0-9]+)', r'_G.\1 = \2', '#define MAX_RECV_SIZE 100' ) )
#_G.MAX_RECV_SIZE = 100

subn函數(shù)類似,只是能定制替換的次數(shù)。

findall

將匹配到的內(nèi)容返回成一個(gè)數(shù)組,這個(gè)應(yīng)該是比較常用的方法。

print( re.findall( '\d+', '66,88,88,777' ) )
# ['66', '88', '88', '777']

finditer

匹配的內(nèi)容以迭代器的方式返回,我們可以對這個(gè)做循環(huán),返回的時(shí)候MatchObject

for num in re.finditer( '\d+', '66,88,88,777' ):
 print num.group()
'''
66
88
88
777
'''

split

re.split(pattern, string, maxsplit=0, flags=0) 
>>> re.split(',', 'Words, words, words.')
['Words', ' words', ' words.']
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']

大寫的\W表示了非字串,這個(gè)在語法里面可以查到。如果加了括號,將不會省略掉匹配到的split的字串。最后這個(gè)在數(shù)組中作為字串分隔符的,.都被保留在數(shù)組中了。

escape

這個(gè)函數(shù)是一個(gè)輔助函數(shù),當(dāng)大量編寫正則表達(dá)式的時(shí)候,可能我們固定的一些字串中包含了正則的保留字串,但是我們不需要讓程序當(dāng)它是re表達(dá)式的時(shí)候,可以使用這個(gè)函數(shù)將字串做轉(zhuǎn)換。

re.escape('1234@gmail.com')
# result
1234\\@gmai\\.com

備注語法:

模式 描述
^ 匹配字符串的開頭
$ 匹配字符串的末尾。
. 匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符。
[…] 用來表示一組字符,單獨(dú)列出:[amk] 匹配 ‘a(chǎn)','m'或'k'
[^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0個(gè)或多個(gè)的表達(dá)式。
re+ 匹配1個(gè)或多個(gè)的表達(dá)式。
re? 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式re{ n}
re{ n,} 精確匹配n個(gè)前面表達(dá)式。
re{ n, m} 匹配 n 到 m 次由前面的正則表達(dá)式定義的片段,貪婪方式a
(re) G匹配括號內(nèi)的表達(dá)式,也表示一個(gè)組
(?imx) 正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 。只影響括號中的區(qū)域。
(?-imx) 正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志。只影響括號中的區(qū)域。
(?: re) 類似 (…), 但是不表示一個(gè)組
(?imx: re) 在括號中使用i, m, 或 x 可選標(biāo)志
(?-imx: re) 在括號中不使用i, m, 或 x 可選標(biāo)志
(?#…) 注釋.
(?= re) 前向肯定界定符。如果所含正則表達(dá)式,以 … 表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗。但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re) 前向否定界定符。與肯定界定符相反;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時(shí)成功
(?> re) 匹配的獨(dú)立模式,省去回溯。
\w 匹配字母數(shù)字
\W 匹配非字母數(shù)字
\s 匹配任意空白字符,等價(jià)于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意數(shù)字,等價(jià)于 [0-9].
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。c
\z 匹配字符串結(jié)束
\G 匹配最后匹配完成的位置。
\b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b' 可以匹配”never” 中的 ‘er',但不能匹配 “verb” 中的 ‘er'。
\B 匹配非單詞邊界。'er\B' 能匹配 “verb” 中的 ‘er',但不能匹配 “never” 中的 ‘er'。
\n, \t, 等. 匹配一個(gè)換行符。匹配一個(gè)制表符。等
\1…\9 匹配第n個(gè)分組的子表達(dá)式。
\10 匹配第n個(gè)分組的子表達(dá)式,如果它經(jīng)匹配。否則指的是八進(jìn)制字符碼的表達(dá)式。

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論