怎么在Python的正則表達(dá)式中找到每個(gè)匹配的確切位置
簡介
re 模塊是我們在 Python 中用于正則表達(dá)式的模塊。文本搜索和更復(fù)雜的文本操作都使用正則表達(dá)式。grep 和 sed 等工具、vi 和 emacs 等文本編輯器以及 Tcl、Perl 和 Python 等計(jì)算機(jī)語言都具有內(nèi)置的正則表達(dá)式支持。
Python 中的 re 模塊提供用于匹配正則表達(dá)式的函數(shù)。
定義我們要查找或修改的文本的正則表達(dá)式稱為模式。文本文字和元字符組成了這個(gè)字符串。編譯函數(shù)用于創(chuàng)建模式。建議使用原始字符串,因?yàn)檎齽t表達(dá)式經(jīng)常包含特殊字符。(r 字符用于指示原始字符串。)字符在組裝成模式之前不會以這種方式解釋。
其中一個(gè)函數(shù)可用于在模式組合后將模式應(yīng)用于文本字符串??捎玫暮瘮?shù)包括 Match、search、find 和 finditer。
使用的語法
此處使用的正則表達(dá)式函數(shù)是:我們使用正則表達(dá)式函數(shù)查找匹配項(xiàng)。
- re.match():確定 RE 是否在字符串開頭匹配。如果字符串開頭的零個(gè)或多個(gè)字符與正則表達(dá)式模式匹配,則 match 方法返回匹配對象。
- p.finditer():查找 RE 匹配的所有子字符串并將它們作為迭代器返回。迭代器在字符串中為模式的所有非重疊匹配項(xiàng)提供匹配對象是 finditer 方法的結(jié)果。
- re.compile():將正則表達(dá)式模式編譯為正則表達(dá)式對象,可以使用其 match()、search() 和下面描述的其他方法進(jìn)行匹配??梢酝ㄟ^指定標(biāo)志的值來修改表達(dá)式的行為。值可以是使用按位或(| 運(yùn)算符)組合的以下任何變量。
- m.start():m.start() 返回匹配開始時(shí)字符串中的偏移量。
- m.group():當(dāng) mo.groups() 返回一組值時(shí),您可以使用多重賦值方法將每個(gè)值分配給不同的變量,如下面的 areaCode, mainNumber = mo.groups() 行中所示。
- search:它與 re.match() 類似,但不要求我們只在文本開頭查找匹配項(xiàng)。search() 函數(shù)可以在字符串中的任何位置定位模式,但它只返回模式的第一個(gè)實(shí)例。
算法
使用 import re 導(dǎo)入 regex 模塊。
使用 re.compile() 函數(shù)創(chuàng)建 Regex 對象。(記得使用原始字符串。)
將要搜索的字符串傳遞給 Regex 對象的 finditer() 方法。這將返回一個(gè) Match 對象。
調(diào)用 Match 對象的 group() 方法返回實(shí)際匹配文本的字符串。
我們還可以使用 span() 方法獲取單個(gè)元組中的開始和結(jié)束索引。
示例
#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 導(dǎo)入 regex 模塊。使用 re.compile() 函數(shù)創(chuàng)建一個(gè) Regex 對象("[A-Z0-9]")并將其分配給變量 p。對 m 運(yùn)行循環(huán)并將要搜索的字符串傳遞到 Regex 對象的 finditer() 方法中。這將返回一個(gè) Match 對象。調(diào)用 Match 對象的 m.group() 和 m.start() 方法返回實(shí)際匹配文本的字符串。
示例
# 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 導(dǎo)入 regex 模塊。使用 re.compile() 函數(shù)創(chuàng)建一個(gè) Regex 對象 (r'(\d\d\d)-(\d\d\d-\d\d\d\d)'),并將其賦值給變量 phoneNumRegex。將要搜索的字符串傳入 Regex 對象的 search() 方法,并將其存儲在變量 mo 中。這將返回一個(gè) Match 對象。調(diào)用 Match 對象的 mo.groups() 方法返回實(shí)際匹配文本的字符串。
結(jié)論
Python re 模塊提供的 search()、match() 和 finditer() 方法允許我們匹配正則表達(dá)式模式,如果匹配成功,它將提供 Match 對象實(shí)例。利用 start()、end() 和 span() 方法使用此 Match 對象檢索有關(guān)匹配字符串的詳細(xì)信息。
當(dāng)有許多匹配項(xiàng)時(shí),如果使用 findall() 加載所有匹配項(xiàng),則存在 RAM 過載的危險(xiǎn)。您可以以迭代器對象的形式獲取所有潛在匹配項(xiàng),而不是使用 finditer() 方法,這將提高效率。
這意味著 finditer() 提供了一個(gè)可調(diào)用對象,當(dāng)調(diào)用該對象時(shí),它會將結(jié)果加載到內(nèi)存中。
到此這篇關(guān)于在Python的正則表達(dá)式中找到每個(gè)匹配的確切位置的文章就介紹到這了,更多相關(guān)Python找到匹配的確切位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python進(jìn)行Word文檔模板自動(dòng)化處理操作完整指南
在日常辦公和文檔處理工作中,我們經(jīng)常需要根據(jù)模板生成大量相似結(jié)構(gòu)的Word文檔,本文將深入介紹如何實(shí)現(xiàn)Word文檔模板的自動(dòng)化處理,從占位符提取到智能填充的完整流程,希望對大家有所幫助2025-10-10
舉例詳解Python中threading模塊的幾個(gè)常用方法
這篇文章主要介紹了舉例詳解Python中threading模塊的幾個(gè)常用方法,threading模塊用來創(chuàng)建和操作線程,是Python學(xué)習(xí)當(dāng)中的重要知識,需要的朋友可以參考下2015-06-06
分布式全文檢索引擎ElasticSearch原理及使用實(shí)例
這篇文章主要介紹了分布式全文檢索引擎ElasticSearch原理及使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
python之當(dāng)你發(fā)現(xiàn)QTimer不能用時(shí)的解決方法
今天小編就為大家分享一篇python之當(dāng)你發(fā)現(xiàn)QTimer不能用時(shí)的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
MacOS?Pytorch?機(jī)器學(xué)習(xí)環(huán)境搭建方法
這篇文章主要介紹了MacOS?Pytorch?機(jī)器學(xué)習(xí)環(huán)境搭建,學(xué)習(xí) Pytorch?,首先要搭建好環(huán)境,這里將采用?Anoconda + Pytorch + PyCharm 來一起構(gòu)建 Pytorch 學(xué)習(xí)環(huán)境,需要的朋友可以參考下2023-02-02
python 將數(shù)據(jù)保存為excel的xls格式(實(shí)例講解)
下面小編就為大家分享一篇python 將數(shù)據(jù)保存為excel的xls格式(實(shí)例講解),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法詳解
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法,結(jié)合實(shí)例形式詳細(xì)分析了Python實(shí)現(xiàn)二叉樹結(jié)構(gòu)的定義、遍歷方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-12-12

