⑴ python re模塊 正則表達式之compile函數
為了重復利用同一個正則對象,需要多次使用這個正則表達式的話,使用re.compile()保存這個正則對象以便復用,可以讓程序更加高效。
1)re.compile
參數:
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 為了增加可讀性,忽略空格和' # '後面的注釋
案例:
在上面,當匹配成功時返回一個 Match 對象,其中:
2)re.findall
在字元串中找到正則表達式所匹配的所有子串,並返回一個列表,如果有多個匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
參數:
案例:
3)re.finditer
和 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並把它們作為一個迭代器返回。
案例:
4)re.split
split 方法按照能夠匹配的子串將字元串分割後返回列表。
案例:
從上篇Python re模塊 正則表達式到這篇,我們已經把常用的正則匹配的方法學會了。
關注我,堅持每日積累一個技巧, 長期堅持 ,我們將會不斷進步。
#python# #程序員# #請回答,你的年度知識點# #教育聽我說# #計算機#
⑵ python re模塊中re.S, re.U, re.I, re.M, re.X
忽略待匹配字元串的大小寫
做本地化local識別,python中有個locale模塊,locale代表不同的語言,地區和字元集
多行匹配,影響 ^ 和 $
將換行符包含進「.」
根據Unicode字元集解析字元。
允許在正則表達式中添加註釋
多個修飾符可同時疊加使用
⑶ 2019-09-16 Python re模塊的TypeError: expected string or bytes-like object錯誤
在使用re模塊的findall()時,出現錯誤:
TypeError: expected string or bytes-like object
解決方案:對findall()的參數加上str()轉換。
⑷ python如何安裝re庫
re庫是Python關於正則表達式的一個內置模塊,使用時無需下載,直接import即可。我們首先來看看re.py自己頭部的注釋是如何描述自己的:
這個模塊提供與Perl語言中類似的正則表達式匹配操作,支持bytes和unicode兩種格式的字元串,處理的字元串可以包含空字元以及超出ASCII碼范圍的字元(比如中文字元)。
正則表達式中既有'A'、'a'這種就代表自身的一般字元,又有一些具有特定含義的特殊字元,如|、(等。特殊字元既可以作為一個單純的值表示它自身,也可以影響它周邊1的正則表達式的解釋。
re庫中還包含一些特殊的字元序列,由\和一個字元組成的特殊序列在下表列出,如果\之後的字元不在下列表格中,正則表達式將會匹配字元本身,如\c匹配的就是字元c本身。我們發現如果 \小寫字母 代表了某一含義,那麼對應的 \大寫字母 常常代表它的補集。
⑸ python 中的問題 關於re模塊
importre
str10="."
str10_list=str10.split()
pattern=re.compile(r"(?P<match_word>The)",re.I)#/<match_word>
print("output#39:")
forwordinstr10_list:
ifpattern.search(word):
print("{:s}".format(pattern.search(word).group('match_word')))
這樣就對了
⑹ Python之re模塊
re模塊是python獨有的匹配字元串的模塊,該模塊中提供的很多功能是基於正則表達式實現的,
而正則表達式是對字元串進行模糊匹配,提取自己需要的字元串部分,他對所有的語言都通用。
1、字元
2、字元集
3、量詞
貪婪模式:總是嘗試匹配盡可能多的字元
非貪婪則相反,總是嘗試匹配盡可能少的字元。
{0,} 匹配前一個字元 0 或多次,等同於 * 元字元
{+,} 匹配前一個字元 1 次或無限次,等同於 + 元字元
{0,1 }匹配前一個字元 0 次或 1 次,等同於 ? 元字元
如果 () 後面跟的是特殊元字元如 (adc)* 那麼*控制的前導字元就是 () 里的整體內容,不再是前導一個字元
4、特殊分組用法表:只對正則函數返回對象的有用
5、斷言
從斷言的表達形式可以看出,它用的就是分組符號,只不過開頭都加了一個問號,這個問號就是在說這是一個非捕獲組,這個組沒有編號,不能用來後向引用,只能當做斷言。
匹配 <title>xxx</title> 中 xxx : (?<=<title>).*(?=</title>)
自己理解就是:
5、例子
(1)非
^(?!.*200).*$ ,只匹配200
^(?!.*[200|400]).*$ ,只匹配200和400
[^a-z] 反取,不含a-z字母的
(2) u4e00-u9fa5 中文
(3) r"([u4e00-u9fa5]s?[u4e00-u9fa5]+)" # 小 明 匹配這種單字中間有空格的
compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用
match 嘗試從字元串的 起始位置 匹配一個模式,如果不是起始位置匹配成功的話,返回none。
search 掃描 整個字元串 並返回 第一個成功 的匹配。
re.match與re.search的區別:
正則表達式替換函數
替換匹配成功的指定位置字元串,並且返回替換次數,可以用兩個變數分別接受
(2) 兩個字元以上切割,放在 [ ] 中(不保留分隔符):
(3) 使用 ( ) 捕獲分組(保留分割符):
在字元串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 ,findall 匹配所有。
用法:
注意1:一旦匹配成,再次匹配,是從前一次匹配成功的,後面一位開始的,也可以理解為匹配成功的字元串,不在參與下次匹配
注意2:如果沒寫匹配規則,也就是空規則,返回的是一個比原始字元串多一位的,空字元串列表
注意3:正則匹配到空字元的情況,如果規則里只有一個組,而組後面是 * 就表示組里的內容可以是 0 個或者多過,這樣組里就有了兩個意思:
一個意思是匹配組里的內容,
二個意思是匹配組里 0 內容(即是空白)
所以盡量避免用 * 否則會有可能匹配出空字元串
正則表達式,返回類型為表達式對象的
如:<_sre.SRE_Match object; span=(6, 7), match='a'>
返回對象的,需要用正則方法取字元串,
⑺ python re模塊中 (P) (P=name) 及 \g<name> 三者的使用區別
題主你好,
沒有單獨的(?P)這種用法, 猜測應該指的是(?P<name>), (?P=name),g<name>這三者的用法.
首先說(?P<name>),它其實和單個圓括弧,(),本質上一樣, 只不過在後面引用分組中多了一種引用方法:
(123)對於這個分組, 你引用時只能是1(這種也是我們最常用的分組與引用的方法),見例子:
=====
希望可以幫到題主, 歡迎追問.
⑻ Python 標准庫模塊 - re
正則表達式引擎對正則表達式文本進行編譯生成正則表達式對象,再由正則表達式對象對目標文本進行匹配,後返回匹配結果。
正則表達式中一共包含 2 中字元: 普通字元 、 元字元
匹配單個字元的元字元及其含義:
匹配重復性的元字元及其含義:
匹配位置的元字元及其含義:
分組匹配的元字元及其含義:
表示或運算的元字元:
轉義元字元:
在 Python 中使用正則表達式,我們需要藉助 re 模塊提供的強大 API,下面我們就來學習幾個 re 模塊常用的介面吧~
參數說明: findall("正則表達式", "要匹配的字元串", flags=標志1|標志2|...)
返回值:以列表形式返回匹配到的字元串。
下面,我們用 findall 返回 Python 之禪中首尾用到的反義詞:
運行結果:
當正則表達式中含有一個以上分組時, findall 返回的列表由元組構成,元組中包含每個分組匹配到的內容。如果只有一個分組,則返回由該分組匹配到的內容組所構成的列表:
match 函數返回的結果是一個 SRE_Match 對象:
SRE_Match 具有很多的屬性,比如 .string 屬性可以方便我們我獲取在匹配時輸入的字元串:
屬性 .re 可以獲取匹配時使用的編譯後的正則表達式模式:
由於默認使用了 re.UNICODE ,所以我們這里的 w 可以匹配中文字元。
屬性 .regs 則以列表的形式返回正則表達式匹配到的內容以及各個分組陪陪到的內容,不過請注意,返回的都是索引的形式:
可以使用序列切片來看一下我們的正則表達式及其中的兩個分組所匹配到的內容:
SRE_Match 對象也提供了非常多好用的方法,比如 groups 可以獲取各個分組匹配到的內容:
group 則可以靈活地獲取正則表達式或對應分組匹配到的內容:
如果使用的正則表達式定義了分組的名稱, group 還可以通過名稱獲取相應分組匹配的內容:
在定義了分組的名稱之後,還可以方便地使用 groupdict 以字典的形式返回所有分組匹配的結果:
最後需要注意的是, match 從字元串的開頭開始匹配,如果開頭不符合要求,則直接返回 None 。
與 match 匹配開頭不同, search 匹配第一個符合規則的字元串,未成功則返回 None 。參數: re.search(pattern, string, flags=0) ;返回值同 match 。
在介紹 match 的使用時,最後一個例子,由於我們在字元串前面添加了 'PYTHON' 導致 match 使用原來的正則表達式無法匹配,返回 None 。此時,使用 search 就可以迎刃而解啦:
運行結果:
小結:
參數: re.split(pattern, string, maxsplit=0, flags=0) , split 功能非常強大,以正則表達式匹配到的標志來分隔字元串,比如下面這樣一個混亂的字元串,我們要提取其中所有的數字:
下面,我們就來詳細介紹一下 split 的用法。
首先,是以單字元切割:
以分號切割時,共產生了 4 個子字元串,放在列表中返回。
下面,還是以單字元切割,但可以使用正則表達式中的 [] 來指定多種字元:
由於字元串 line 中有連續的 2 個分號,逗號或者空格,因此可以使用 [;s,]+ 來切割:
最後,上面的字元串在切割時,分隔符都沒有被保留下來,使用括弧捕獲分組,即可保留分隔符:
re.sub 提供比字元串的 replace 方法更加強大的功能:對於輸入的字元串 string ,利用正則表達式 pattern 強大的字元串處理功能,實現復雜的字元串替換處理為 repl ,返回被替換後的字元串。
下面的例子中,我們將句子中多餘的空格和數字去掉:
如果想要知道替換過程中,共發生了多少次替換,可以使用 subn :
小結:
上述的案例中,我們每次都需要傳入正則表達式,相應的函數每次在調用時,都需要編譯一次正則表達式。如果上述過程需要多次重復,那麼每次都去耗費時間編譯正則表達式是很不劃算的。
re 模塊為我們提供了 compile 函數,用來編譯正則表達式模式,返回編譯好模式。因此,可以把那些常用的正則表達式編譯成正則表達式對象,以提高效率。
格式: re.compile(pattern, flags=0) ,其中 pattern 為編譯時用的表達式字元串, flags 為編譯標志位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。常用的 flags 有:
註:使用按位或 | 連接多個 flags 。
我們上述介紹的 re 模塊的匹配、分割、替換函數, compile 函數的返回值類提供了相應的方法,使用方式類似,只是不需要傳入正則表達式字元串而已。
由於用法幾乎一致,這里就不一一舉例啦~
貪婪模式 : * + ? {m,n} ,正則表達式的重復默認總是盡可能多得向後匹配內容。
非貪婪模式 : *? +? ?? {m,n}? ,盡可能少的匹配內容。
⑼ Python模塊的幾種類型簡介
view plain to clipboardprint?
import os
import stat
import time<DIV></DIV>
fileStats = os.stat ( 'test.txt' )
fileInfo = {
'Size' : fileStats [ stat.ST_SIZE ],
'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ),
'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ),
'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ),
'Mode' : fileStats [ stat.ST_MODE ]
}
for infoField, infoValue in fileInfo:
print infoField, ':' + infoValue
if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):
print 'Directory. '
else:
print 'Non-directory.'
import os
import stat
import time
fileStats = os.stat ( 'test.txt' )
fileInfo = {
'Size' : fileStats [ stat.ST_SIZE ],
'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ),
'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ),
'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ),
'Mode' : fileStats [ stat.ST_MODE ]
}
for infoField, infoValue in fileInfo:
print infoField, ':' + infoValue
if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):
print 'Directory. '
else:
print 'Non-directory.'