在 Python 中如何使用 Re 模塊的正則表達(dá)式通配符
通配符在正則表達(dá)式中用作表示或交換一個或多個字符的符號。 這些主要用于簡化搜索條件。
本文詳細(xì)解釋了如何在 Python 中使用帶有通配符的 re.sub() 來匹配字符串與正則表達(dá)式。
使用 re.sub() 函數(shù)在 Python 中使用通配符進(jìn)行正則表達(dá)式操作
Python 中的 re 模塊用于對正則表達(dá)式 (RegEx) 進(jìn)行操作。 這些是用于查找一個字符串或一組字符串的唯一字符串。
將文本與特定模式進(jìn)行比較可以確定它是否存在。
它還可以將一個模式劃分為一個或多個子模式。 通過 re 模塊在 Python 中提供正則表達(dá)式支持。
它的主要目的是在正則表達(dá)式中搜索字符串。
在我們了解如何在 Python 中使用帶有通配符的 re.sub()
之前,讓我們學(xué)習(xí)一下 re.sub() 函數(shù)在普通字符串語句上的實(shí)現(xiàn)。
在 Python 中使用 re.sub() 模塊替換正則表達(dá)式中的匹配項(xiàng)
re.sub()
函數(shù)用字符串替換給定文本中的一個或多個匹配項(xiàng)。
re.sub(pattern, repl, string, count=0, flags=0)
它返回通過用替換 repl 替換字符串中模式最左邊的非重疊事件而創(chuàng)建的字符串。
在沒有匹配的情況下,字符串以其原始形式返回。 如果 repl 是字符串,則處理任何反斜杠轉(zhuǎn)義。 repl 也可以是一個函數(shù)。
讓我們理解下面的代碼示例。
import re rex = '[0-9]+' string_reg = 'ID - 54321, Pay - 586.32' repl = 'NN' print('Original string') print(string_reg) result = re.sub(rex, repl, string_reg) print('After replacement') print(result)
代碼的作用:
- 第一行代碼導(dǎo)入 re 模塊。
- 要搜索的模式存儲在變量 rex 中。 量詞 - [0-9]+ 表示一組 0-9 的數(shù)字,其小數(shù)位可以擴(kuò)展到任意位數(shù)。
- 執(zhí)行子操作的字符串存儲在變量 string_reg 中。
- 替換模式的字符串存儲在變量 repl 中。
- re.sub() 操作在字符串變量 string_reg 中查找模式 rex 并將其替換為 repl。 返回的字符串存儲在變量 result 中。
result = re.sub(rex, repl, string_reg)
輸出:所有數(shù)字都被替換為“NN”,而所有字母數(shù)字都保持不變。
Original string
ID - 54321, Pay - 586.32
After replacement
ID - NN, Pay - NN.NN
了解如何在 re.sub() 子模塊中使用通配符
本文主要關(guān)注四種類型的通配符—— .
(點(diǎn))、*
、?
和 +
。 了解它們各自的作用對于學(xué)習(xí)如何在 Python 中使用帶有通配符的 re.sub() 非常重要。
.
(點(diǎn)) - 將 re.sub
與 .
Python 中的通配符匹配除新行之外的任何字符。 下面程序中引入了re模塊,在一個字符串變量string_reg中存放了三個字符串實(shí)例。
將 re.sub()
與 .
在 Python 中使用通配符時,string_reg 變量會被 re.sub() 函數(shù)返回的結(jié)果覆蓋。 當(dāng)點(diǎn)與新字符匹配時,程序會搜索模式 ad 以及在 ad 之后重復(fù)的任意數(shù)量的 d。
在輸出中可以看出,每次程序找到模式 ad. 時,都會將其替換為 REMOVED。
import re string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx' string_reg = re.sub(r'ad.', 'REMOVED ', string_reg) print(string_reg)
輸出:
a23kREMOVED hh234 ... REMOVED 2asdf675 ... xxxREMOVED 2axxx
2.星號 (*
) - 在 Python 中使用帶有此通配符的 re.sub()
來為前面的 RE 提供盡可能多的重復(fù),在結(jié)果 RE 中匹配 0 次或更多次重復(fù)。
例如,ad* 匹配字母“a”、“ad”或后跟任意數(shù)量的 d 的“a”。
可以在此處的輸出中看到,“a”和“ad”的每個實(shí)例都被關(guān)鍵字“PATCH”替換。
import re string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx' string_reg = re.sub(r'ad*', 'PATCH', string_reg) print(string_reg)
輸出:
PATCH23kPATCHhh234 ... PATCH2PATCHsdf675 ... xxxPATCH2PATCHxxx
3.+
- 在 Python 中使用帶有此通配符的 re.sub() 來匹配新 RE 中先前 RE 的 1 次或多次重復(fù)。 Ad+ 不會匹配 ‘a’; 相反,它匹配 ‘a’ 后跟任何非零數(shù)的 d。
該函數(shù)搜索模式“ad…”,其中“…”表示后續(xù) RE“d”的重復(fù)編號,并將其替換為“POP”。
import re string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx' string_reg = re.sub(r'ad+', 'POP', string_reg) print(string_reg)
輸出:
a23kPOPhh234 ... POP2asdf675 ... xxxPOP2axxx
4.?
- 使下一個 RE 匹配前一個 RE 的 0 或 1 次重復(fù)。 模式 ad? 匹配“a”或“ad”。
該程序找到“a”或“ad”的實(shí)例并將它們替換為正則表達(dá)式 (REGEX)“POP”。
import re string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx' string_reg = re.sub(r'ad?', 'POP', string_reg) print(string_reg)
輸出:
POP23kPOPdhh234 ... POPd2POPsdf675 ... xxxPOPd2POPxxx
在 Python 中一起使用兩個或多個正則表達(dá)式通配符
有時,在 Python 中使用帶通配符的 re.sub() 僅使用一個量詞不足以獲得所需的結(jié)果。 組合量詞可以將更復(fù)雜的模式傳遞給系統(tǒng)。
讓我們了解其中的一些。
*?
、+?
、??
- 在前面的示例中,我們了解了“.
”、“+
”、“*
”量詞。 它們都是貪心的,意味著它們匹配盡可能多的文本。
例如,如果 RE<.*>
與 <a> b <c>
匹配,它將匹配完整的字符串而不是僅僅匹配 <a>
,這通常不是所需的行為。
?
最后添加量詞來解決這個問題。 量詞指示它以最小或非貪婪的方式進(jìn)行匹配,這意味著匹配的字符最少。
當(dāng)使用 RE<.*?>
模式時,只有 <a>
會匹配。
import re string_reg = 'as56ad5 ... dhgasd55df ... xxxadd2axxx' string_reg = re.sub(r'ad*?', 'SUGAR', string_reg) print(string_reg)
輸出:ad*?
量詞只搜索“a”的實(shí)例。
SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
對于 ad+?:
它只搜索“ad”的實(shí)例。
as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
對于 ad??:
它還只搜索“a”的實(shí)例。
SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
*+
、++
、?+
(也稱為所有格量詞)- 類似于“*
”、“+
”和“?
” 量詞,帶有“+
”的量詞盡可能頻繁地匹配。
當(dāng)它后面的表達(dá)式不匹配時,這些不允許像貪婪量詞那樣進(jìn)行回溯。 這種類型的量詞稱為所有格量詞。
例如,a*a
將匹配“aaaa”,因?yàn)?a*
匹配所有四個 a,但是當(dāng)遇到最后一個“a”時,表達(dá)式回溯,a*
總共只匹配三個 a 和最后一個“a” 匹配第四個“a”。
但是當(dāng)表達(dá)式 a*+a
用來匹配 “aaaa” 時,a*+
會匹配所有四個 “a”,但是它不能回溯,不會匹配到最后的 “a”,因?yàn)樗也坏礁?要匹配的字符。
x*+
、x++
和 x?+
的等價物分別是 (?>x*)
、(?>x+)
和 (?>x?)
。 讓我們看一下程序以更好地理解這個概念。
import regex string_reg = 'as56ad5 ... dhgasd55df ... xxxadd2axxx' string_reg = regex.sub(r'ad*+', 'SUGAR', string_reg) print(string_reg)
注意
:re 模塊不支持所有格量詞。 請改用 regex()
模塊。
輸出:查找 a 或 ‘adddd…’ 的實(shí)例。
SUGARs56SUGAR5 ... dhgSUGARsd55df ... xxxSUGAR2SUGARxxx
對于 ad++:
查找“ad”或“adddd…”的實(shí)例。
as56SUGAR5 ... dhgasd55df ... xxxSUGAR2axxx
對于 ad+?:
與 ad++
的行為相同。
as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
通過在 Python 中添加通配符,使用正則表達(dá)式模式和 re.sub() 函數(shù)對字符串執(zhí)行操作
我們已經(jīng)學(xué)習(xí)了如何在 Python 中使用帶有通配符的 re.sub()
。 現(xiàn)在我們將結(jié)合使用這些概念來搜索正則表達(dá)式中的字符串模式并替換整個單詞而不僅僅是字符串模式。
問題陳述向我們展示了一個字符串和一個模式。 需要在給定的字符串中搜索模式。
一旦找到,re.sub()
函數(shù)將替換整個單詞。
示例:在開頭找到模式時替換整個單詞
1.導(dǎo)入 re 模塊。
2.創(chuàng)建一個變量 string_reg 并存儲任何字符串值。 這里存儲了一個復(fù)合字符串,這意味著 re.sub() 函數(shù)將對字符串內(nèi)的所有四個組實(shí)現(xiàn)其效果。
string_reg = """\ ... 23khadddddh234 > REMOVED23khh234 ... add2asdf675 > REMOVED2asdf675""
該函數(shù)需要在字符串中找到一個模式,找到后替換整個字符串。 要查找的模式是“添加”,因此使用量詞的組合來實(shí)現(xiàn)所需的結(jié)果。
該組合應(yīng)采用與“ad”、“add”或“addddd”相匹配的方式。 但是,add23khh234 和 add2asdf675 都不匹配。
最好的方法是使用 add.+?
。
string_reg = re.sub(r'add.+? ', 'REMOVED ', string_reg)
代碼
import re string_reg = """\ ... 23khadddddh234 > REMOVED23khh234 ... add2asdf675 > REMOVED2asdf675""" string_reg = re.sub(r'add.+? ', 'REMOVED ', string_reg) print(string_reg)
輸出:程序搜索“ad…”,找到后將其替換為 repl“REMOVED”。 如果“ad…”出現(xiàn)在開頭,它會替換整個單詞。
... 23khREMOVED > REMOVED23khh234
... REMOVED > REMOVED2asdf675
總結(jié)
生動描述了如何在Python中使用帶通配符的 re.sub()
。 本文的第一部分側(cè)重于將 Python 函數(shù) re.sub 與簡單的 REGEX 結(jié)合使用。
然后詳細(xì)解釋了在 re.sub()
中使用通配符的概念。
閱讀本文后,讀者可以輕松地在 Python 中使用帶有通配符的 re.sub()
并創(chuàng)建在 REGEX 中搜索字符串模式的程序。
到此這篇關(guān)于在 Python 中如何使用 Re 模塊的正則表達(dá)式通配符的文章就介紹到這了,更多相關(guān)Python正則表達(dá)式通配符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)保存最后N個元素的方法
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法 保存最后N個元素的方法,涉及Python基于迭代器與生成器實(shí)現(xiàn)歷史記錄功能的相關(guān)操作技巧,需要的朋友可以參考下2018-02-02python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解
這篇文章主要為大家介紹了python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04python3.6 實(shí)現(xiàn)AES加密的示例(pyCryptodome)
本篇文章主要介紹了python3.6 實(shí)現(xiàn)AES加密的示例(pyCryptodome),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01python提取照片坐標(biāo)信息的實(shí)例代碼
這篇文章主要介紹了python提取照片坐標(biāo)信息的實(shí)例代碼,文中給大家提到了Python利用exifread庫來解析照片的經(jīng)緯度,通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08python爬取企查查企業(yè)信息之selenium自動模擬登錄企查查
這篇文章主要介紹了python爬取企查查企業(yè)信息之自動模擬登錄企查查以及selenium獲取headers,selenium獲取cookie,需要的朋友可以參考下2021-04-04python生產(chǎn)環(huán)境禁用assert斷言的方法
斷言就是世界結(jié)果與期望結(jié)果去對比,符合預(yù)期的測試就是pass,不符合預(yù)期的測試就是failed,下面這篇文章主要給大家介紹了關(guān)于python生產(chǎn)環(huán)境禁用assert斷言的相關(guān)資料,需要的朋友可以參考下2022-06-06