摘要:正則表達式是定義搜索模式的字符序列。通常這種模式被字符串搜索算法用于字符串上的查找或查找和替換操作,或者用于輸入驗證。
正則表達式是定義搜索模式的字符序列。通常這種模式被字符串搜索算法用于字符串上的“查找”或“查找和替換”操作,或者用于輸入驗證。1. 正則表達式的語法
. 表示任何單個字符
[] 字符集,對單個字符給出取值范圍
[^] 非字符集,對單個字符給出排除范圍
*前一個字符0次或者無限次擴展
+前一個字符1次或無限次擴展
?前一個字符0次或1次擴展
|左右表達式任意一個
{m}擴展前一個字符m次
{m,n}擴展前一個字符m至n次
^匹配字符串開頭
$匹配字符串結(jié)尾
()分組標記,內(nèi)部只能使用|操作符
d數(shù)字,等價于[0-9]
w單詞字符,等價于[A-Z,a-z,0-9]
2. python中re庫的使用Re庫是python的標準庫,主要用于字符串匹配,調(diào)用方法:import re2.1. 正則表達式字符串的類型
re庫采用raw string類型來表示正則表達式,表示為
r"text"
raw string是不包含對轉(zhuǎn)義符的再次轉(zhuǎn)義的字符串,總而言就是string會對字符轉(zhuǎn)義,而raw string不會,因為在正則表達中會出現(xiàn)轉(zhuǎn)義符號,所以避免繁瑣我們使用raw string
re.search()在一個字符串中搜索正則表達式的第一個位置,返回match對象
re.match()從一個字符串的開始位置起匹配正則表達式,返回match對象
re.findall()搜索字符串,以列表類型返回全部能匹配的子串
re.split()將一個字符串按照正則表達式匹配結(jié)果進行分割,返回列表類型
re.finditer()搜索字符串,返回一個匹配結(jié)果的迭代類型,每個迭代元素是match對象
re.sub()在一個字符串中替換所有匹配正則表達式的子串,返回替換后的字符串
2.2.1. re.search(pattern, string, flags=0)在一個字符串中搜索正則表達式的第一個位置,返回match對象
pattern : 正則表達式的字符串或原生字符串表示
string : 待匹配字符串
flags : 正則表達式使用時的控制標記
re.I re.IGNORECASE 忽略正則表達式的大小寫,[A‐Z]能夠匹配小寫字符
re.M re.MULTILINE 正則表達式中的^操作符能夠?qū)⒔o定字符串的每行當作匹配開始
re.S re.DOTALL 正則表達式中的.操作符能夠匹配所有字符,默認匹配除換行外的所有字符
舉例說明:
import re match = re.search(r"[1-9]d{5}", "BIT 100081") if match: print(match.group(0)) 結(jié)果為1000812.2.2. re.match(pattern, string, flags=0)
從一個字符串的開始位置起匹配正則表達式,返回match對象
參數(shù)同search函數(shù)
舉例說明:
import re match = re.match(r"[1-9]d{5}", "BIT 100081") print(match.group(0)) 結(jié)果會報錯,match為空,因為match函數(shù)是 從字符串開始位置開始匹配,因為從開始位置沒有匹配到,所以為空2.2.3. re.findall(pattern, string, flags=0)
搜索字符串,以列表類型返回全部能匹配的子串
參數(shù)同search
舉例說明:
import re ls=re.findall(r"[1-9]d{5}", "BIT100081 TSU100084") print(ls) 結(jié)果為["100081", "100084"]2.2.4. re.split(pattern, string, maxsplit=0, flags=0)
將一個字符串按照正則表達式匹配結(jié)果進行分割返回列表類型
maxsplit : 最大分割數(shù),剩余部分作為最后一個元素輸出
舉例說明 :
import re re.split(r"[1-9]d{5}", "BIT100081 TSU100084") 結(jié)果["BIT", " TSU", " "] re.split(r"[1-9]d{5}", "BIT100081 TSU100084", maxsplit=1) 結(jié)果["BIT", " TSU100081"]2.2.5. re.finditer(pattern, string, maxsplit=0, flags=0)
搜索字符串,返回一個匹配結(jié)果的迭代類型,每個迭代元素是match對象
參數(shù)同search
舉例說明 :
import re for m in re.finditer(r"[1-9]d{5}", "BIT100081 TSU100084"): if m: print(m.group(0)) 結(jié)果為 100081 1000842.2.6. re.sub(pattern, repl, string, count=0, flags=0)
在一個字符串中替換所有匹配正則表達式的子串返回替換后的字符串
repl : 替換匹配字符串的字符串
count : 匹配的最大替換次數(shù)
舉例說明:
import re re.sub(r"[1-9]d{5}", ":zipcode", "BIT100081 TSU100084") 結(jié)果為 "BIT:zipcode TSU:zipcode"2.3 Re庫的另一種等價用法(面向?qū)ο螅?/b>
rst=re.search(r"[1-9]d{5}", "BIT 100081") 函數(shù)式的調(diào)用,一次性操作
pat=re.compile(r"[1-9]d{5}") rst=pat.search("BIT 100081") 編譯后多次操作
regex=re.complie(pattern,flags=0)
regex也有以上六種用法
Match對象是是一次匹配的結(jié)果,包含匹配的很多信息
以下是Match對象的屬性
.string 待匹配的文本
.re 匹配時使用的patter對象(正則表達式)
.pos 正則表達式搜索文本的開始位置
.endpos 正則表達式搜索文本的結(jié)束位置
以下是Match對象的方法
.group(0) 獲得匹配后的字符串
.start() 匹配字符串在原始字符串的開始位置
.end() 匹配字符串在原始字符串的結(jié)束位置
.span() 返回(.start(), .end())
2.5 Re庫的貪婪匹配和最小匹配當正則表達式可以匹配長短不同的多項時,返回哪一個呢?Re庫默認采用貪婪匹配,即返回匹配最長的子串
最小匹配
*? 前一個字符0次或無限次擴展,最小匹配
+? 前一個字符1次或無限次擴展,最小匹配
?? 前一個字符0次或1次擴展,最小匹配
{m,n}? 擴展前一個字符m至n次(含n),最小匹配
只要長度輸出可能不同的,都可以通過在操作符后增加?變成最小匹配
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43136.html
摘要:正則表達式使用反斜杠來表示特殊形式,或者把特殊字符轉(zhuǎn)義成普通字符。解決辦法是對于正則表達式樣式使用的原始字符串表示法在帶有前綴的字符串字面值中,反斜杠不必做任何特殊處理。為了避免警告,需要將它們用反斜杠轉(zhuǎn)義。 上一篇文章:Python標準庫---18、文本處理服務(wù):string 常見的字符串操作下一篇文章: 這個模塊提供了與 Perl 語言類似的正則表達式匹配操作。 模式和被搜索的字...
摘要:上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)高級用法下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)與正則表達式抓取貓眼電影排行本節(jié)我們看一下正則表達式的相關(guān)用法,正則表達式是處理字符串的強大的工具,它有自己特定的語法結(jié)構(gòu),有了它,實現(xiàn)字符串的檢索替換匹配驗證都不在話下。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---25、requests:高級用法下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---27、Requests與正則表達式抓取貓眼...
摘要:大奉打更人賣報小郎君這個人仙太過正經(jīng)言歸正傳從紅月開始黑山老鬼穩(wěn)住別浪跳舞二解析數(shù)據(jù)是一個可以從或文件中提取數(shù)據(jù)的庫。 目錄 一、XPath解析數(shù)據(jù) 1、XPath解析數(shù)據(jù) 2、XML的樹形結(jié)構(gòu) 3、使用XPath選取節(jié)點 4、課堂案例 - 爬取起點小說網(wǎng) 二、BeautifulSoup解析...
摘要:注原文地址為我的一個同事提到他錯過了的正則表達式的語法糖。首先,從正則表達式檢索捕捉組需要兩個步驟。語法糖為了好玩,我把一個小小的增加了一些語法糖的正則表達式庫的幫助類放在一起。調(diào)用將調(diào)用類的方法。 注:原文地址為 Playing with Python Magic Methods to make a nicer Regex API 我的一個同事提到,他錯過了 Ruby 的正...
本文主要是給大家介紹的是,Python中正則表達式如何實現(xiàn)重疊匹配的具體操作方法,給大家貼出了具體實例代碼,希望能給各位讀者帶來一定的幫助。正則表達式實現(xiàn)重疊匹配importregex string='100101010001' str_re='101' print(regex.findall(str_re,string,overlapped=True))普通的...
閱讀 2750·2023-04-25 22:15
閱讀 1816·2021-11-19 09:40
閱讀 2161·2021-09-30 09:48
閱讀 3236·2021-09-03 10:36
閱讀 2037·2021-08-30 09:48
閱讀 1872·2021-08-24 10:00
閱讀 2739·2019-08-30 15:54
閱讀 714·2019-08-30 15:54