怎么在Python的正則表達式中找到每個匹配的確切位置
簡介
re 模塊是我們在 Python 中用于正則表達式的模塊。文本搜索和更復雜的文本操作都使用正則表達式。grep 和 sed 等工具、vi 和 emacs 等文本編輯器以及 Tcl、Perl 和 Python 等計算機語言都具有內(nèi)置的正則表達式支持。
Python 中的 re 模塊提供用于匹配正則表達式的函數(shù)。
定義我們要查找或修改的文本的正則表達式稱為模式。文本文字和元字符組成了這個字符串。編譯函數(shù)用于創(chuàng)建模式。建議使用原始字符串,因為正則表達式經(jīng)常包含特殊字符。(r 字符用于指示原始字符串。)字符在組裝成模式之前不會以這種方式解釋。
其中一個函數(shù)可用于在模式組合后將模式應用于文本字符串??捎玫暮瘮?shù)包括 Match、search、find 和 finditer。
使用的語法
此處使用的正則表達式函數(shù)是:我們使用正則表達式函數(shù)查找匹配項。
- re.match():確定 RE 是否在字符串開頭匹配。如果字符串開頭的零個或多個字符與正則表達式模式匹配,則 match 方法返回匹配對象。
- p.finditer():查找 RE 匹配的所有子字符串并將它們作為迭代器返回。迭代器在字符串中為模式的所有非重疊匹配項提供匹配對象是 finditer 方法的結果。
- re.compile():將正則表達式模式編譯為正則表達式對象,可以使用其 match()、search() 和下面描述的其他方法進行匹配??梢酝ㄟ^指定標志的值來修改表達式的行為。值可以是使用按位或(| 運算符)組合的以下任何變量。
- m.start():m.start() 返回匹配開始時字符串中的偏移量。
- m.group():當 mo.groups() 返回一組值時,您可以使用多重賦值方法將每個值分配給不同的變量,如下面的 areaCode, mainNumber = mo.groups() 行中所示。
- search:它與 re.match() 類似,但不要求我們只在文本開頭查找匹配項。search() 函數(shù)可以在字符串中的任何位置定位模式,但它只返回模式的第一個實例。
算法
使用 import re 導入 regex 模塊。
使用 re.compile() 函數(shù)創(chuàng)建 Regex 對象。(記得使用原始字符串。)
將要搜索的字符串傳遞給 Regex 對象的 finditer() 方法。這將返回一個 Match 對象。
調(diào)用 Match 對象的 group() 方法返回實際匹配文本的字符串。
我們還可以使用 span() 方法獲取單個元組中的開始和結束索引。
示例
#importing re functions
import re
#compiling [A-Z0-9] and storing it in a variable p
p = re.compile("[A-Z0-9]")
#looping m times in p.finditer
for m in p.finditer('A5B6C7D8'):
#printing the m.start and m.group
print m.start(), m.group()輸出
這給出了輸出 -
0 A
1 5
2 B
3 6
4 C
5 7
6 D
7 8
代碼說明
使用 import re 導入 regex 模塊。使用 re.compile() 函數(shù)創(chuàng)建一個 Regex 對象("[A-Z0-9]")并將其分配給變量 p。對 m 運行循環(huán)并將要搜索的字符串傳遞到 Regex 對象的 finditer() 方法中。這將返回一個 Match 對象。調(diào)用 Match 對象的 m.group() 和 m.start() 方法返回實際匹配文本的字符串。
示例
# Python program to illustrate
# Matching regex objects
# with groups
import re
phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo = phoneNumRegex.search('My number is 415-555-4242.')
print(mo.groups())輸出
這給出了輸出 -
('415', '555-4242')
代碼說明
使用 import re 導入 regex 模塊。使用 re.compile() 函數(shù)創(chuàng)建一個 Regex 對象 (r'(\d\d\d)-(\d\d\d-\d\d\d\d)'),并將其賦值給變量 phoneNumRegex。將要搜索的字符串傳入 Regex 對象的 search() 方法,并將其存儲在變量 mo 中。這將返回一個 Match 對象。調(diào)用 Match 對象的 mo.groups() 方法返回實際匹配文本的字符串。
結論
Python re 模塊提供的 search()、match() 和 finditer() 方法允許我們匹配正則表達式模式,如果匹配成功,它將提供 Match 對象實例。利用 start()、end() 和 span() 方法使用此 Match 對象檢索有關匹配字符串的詳細信息。
當有許多匹配項時,如果使用 findall() 加載所有匹配項,則存在 RAM 過載的危險。您可以以迭代器對象的形式獲取所有潛在匹配項,而不是使用 finditer() 方法,這將提高效率。
這意味著 finditer() 提供了一個可調(diào)用對象,當調(diào)用該對象時,它會將結果加載到內(nèi)存中。
到此這篇關于在Python的正則表達式中找到每個匹配的確切位置的文章就介紹到這了,更多相關Python找到匹配的確切位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python之當你發(fā)現(xiàn)QTimer不能用時的解決方法
今天小編就為大家分享一篇python之當你發(fā)現(xiàn)QTimer不能用時的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
MacOS?Pytorch?機器學習環(huán)境搭建方法
這篇文章主要介紹了MacOS?Pytorch?機器學習環(huán)境搭建,學習 Pytorch?,首先要搭建好環(huán)境,這里將采用?Anoconda + Pytorch + PyCharm 來一起構建 Pytorch 學習環(huán)境,需要的朋友可以參考下2023-02-02
python 將數(shù)據(jù)保存為excel的xls格式(實例講解)
下面小編就為大家分享一篇python 將數(shù)據(jù)保存為excel的xls格式(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python數(shù)據(jù)結構與算法之二叉樹結構定義與遍歷方法詳解
這篇文章主要介紹了Python數(shù)據(jù)結構與算法之二叉樹結構定義與遍歷方法,結合實例形式詳細分析了Python實現(xiàn)二叉樹結構的定義、遍歷方法及相關注意事項,需要的朋友可以參考下2017-12-12

