国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python正則表達式經典入門教程

2020-01-04 17:12:30
字體:
來源:轉載
供稿:網友

本文實例總結了Python正則表達式基本用法。分享給大家供大家參考,具體如下:

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

match

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

search

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

re中的選項

通常在flag里面可以設置.

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

sub 替換

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

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

import reprint( 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函數類似,只是能定制替換的次數。

findall

將匹配到的內容返回成一個數組,這個應該是比較常用的方法。

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

finditer

匹配的內容以迭代器的方式返回,我們可以對這個做循環,返回的時候MatchObject

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

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表示了非字串,這個在語法里面可以查到。如果加了括號,將不會省略掉匹配到的split的字串。最后這個在數組中作為字串分隔符的,.都被保留在數組中了。

escape

這個函數是一個輔助函數,當大量編寫正則表達式的時候,可能我們固定的一些字串中包含了正則的保留字串,但是我們不需要讓程序當它是re表達式的時候,可以使用這個函數將字串做轉換。

re.escape('1234@gmail.com')# result1234//@gmai//.com

備注語法:

 

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

 

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄄城县| 应城市| 铜川市| 中江县| 阿拉善左旗| 温州市| 嘉黎县| 哈巴河县| 治多县| 阿拉善左旗| 阳东县| 秦安县| 乌什县| 滦南县| 银川市| 河池市| 瑞金市| 六安市| 区。| 哈尔滨市| 洛南县| 瓦房店市| 隆回县| 泽普县| 沙湾县| 营口市| 临汾市| 托克托县| 来凤县| 循化| 工布江达县| 阳山县| 荣成市| 汤原县| 北流市| 海晏县| 屏山县| 昭苏县| 盖州市| 虹口区| 荥阳市|