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

首頁 > 編程 > Python > 正文

Python基礎教程之正則表達式基本語法以及re模塊

2019-11-25 16:51:54
字體:
來源:轉載
供稿:網友

什么是正則:

正則表達式是可以匹配文本片段的模式。

正則表達式'Python'可以匹配'python'

正則是個很牛逼的東西,python中當然也不會缺少。

所以今天的Python就跟大家一起討論一下python中的re模塊。

re模塊包含對正則表達式的支持。

通配符

.表示匹配任何字符:

‘.ython'可以匹配'python'和'fython'

對特殊字符進行轉義:

‘python/.org'匹配‘python.org'

字符集

‘[pj]ython'能夠匹配'python'和'jython'

反轉字符集

‘[^abc]'可以匹配除了abc之外的任何字符

選擇符

使用管道符號|

可選項

加上問好就變為了可選項:

r'(http://)?(www.)?python.org‘只能匹配下面幾種:

'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'

重復子模式

*:允許模式重復0次或多次
+:允許模式重復1次或多次
{m, n}允許模式重復m-n次

當然,正則語法規則很多,遠不止上面的這些。但是我們只能點到為止了,因為這篇博客的目的是介紹Python中的模塊,re模塊。

re 模塊使 Python 語言擁有全部的正則表達式功能。

compile 函數根據一個模式字符串和可選的標志參數生成一個正則表達式對象。該對象擁有一系列方法用于正則表達式匹配和替換。

re 模塊也提供了與這些方法功能完全一致的函數,這些函數使用一個模式字符串做為它們的第一個參數。

re中重要的函數:

compile(pattern[, flags]) 根據包含正則表達式的字符串創建模式對象

search(pattern, string[, flags]) 在字符串中尋找模式

match(pattern, string[, flags]) 在字符串的開始處匹配模式

split(pattern, string[, maxsplit=0]) 根據匹配項分割字符串

findall(pattern, string) 列出字符串中模式的所有匹配項

sub(pat, rep, string[, count=0]) 字符串中所有pat的匹配項用repl替換

escape(string) 將字符串中所有特殊表達式字符轉義

下面就進行簡單的應用:

使用match

import reprint(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配

使用search

import reprint(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配

這時候需要停一下,match和search的區別呢?

看看結果先:

match例子中結果:

(0, 3)
None

search例子中結果:

(0, 3)
(11, 14)

match()函數只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配;
也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none。

search()會掃描整個字符串并返回第一個成功的匹配。

使用sub

Python 的re模塊提供了re.sub用于替換字符串中的匹配項。

#!/usr/bin/pythonimport rephone = "2004-959-559 # This is Phone Number"# Delete Python-style commentsnum = re.sub(r'#.*$', "", phone)print "Phone Num : ", num# Remove anything other than digitsnum = re.sub(r'/D', "", phone) print "Phone Num : ", num

結果:

Phone Num : 2004-959-559
Phone Num : 2004959559

最后獻上菊花:

^ 匹配字符串的開頭
$ 匹配字符串的末尾。
. 匹配任意字符,除了換行符,當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| b 匹配a或b
(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個分組的子表達式,如果它經匹配。否則指的是八進制字符碼的表達式。

re的正則表達式語法

   正則表達式語法表如下:

語法 意義 說明
"." 任意字符
"^" 字符串開始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串結尾 與上同理
"*" 
0 個或多個字符(貪婪匹配)
<*>匹配
"+"
1 個或多個字符(貪婪匹配
與上同理
"?"
0 個或多個字符(貪婪匹配
與上同理
*?,+?,??
以上三個取第一個匹配結果(非貪婪匹配 <*>匹配

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保德县| 安图县| 介休市| 盐池县| 旬阳县| 六安市| 友谊县| 井研县| 青龙| 安图县| 苍溪县| 正镶白旗| 鹰潭市| 天台县| 开阳县| 南通市| 碌曲县| 堆龙德庆县| 方山县| 绵竹市| 汶川县| 麻城市| 丰县| 阳谷县| 新干县| 永胜县| 任丘市| 白山市| 曲水县| 富裕县| 枣庄市| 济宁市| 鹤峰县| 建平县| 阿巴嘎旗| 红安县| 惠来县| 青海省| 理塘县| 梁平县| 鲁甸县|