摘要:最簡(jiǎn)單的查找替換在中查找和替換非常簡(jiǎn)單,如果當(dāng)前對(duì)象是一個(gè)字符串時(shí),你可以使用該類型提供的或者方法查找指定的字符,如果能找到則會(huì)返回字符第一次出現(xiàn)的索引,如果不存在則返回。下面是正則查找的簡(jiǎn)單示例。
最簡(jiǎn)單的查找替換
在Python中查找和替換非常簡(jiǎn)單,如果當(dāng)前對(duì)象是一個(gè)字符串str時(shí),你可以使用該類型提供的find()或者index()方法查找指定的字符,如果能找到則會(huì)返回字符第一次出現(xiàn)的索引,如果不存在則返回-1。
>>> s = "Cat and Dog" >>> s.find("Dog") 8 >>> s.index("Dog") 8 >>> s.find("Duck") -1
如果要替換目標(biāo)字符串,用replace()方法就好了。
>>> s = "Cat and Dog" >>> s.replace("Cat", "Dog") "Dog and Dog"通配符查找匹配
當(dāng)然,如果你覺得上面的功能還不能滿足你,你想使用通配符來查找字符串?沒問題!fnmatch這個(gè)庫(kù)就能滿足你的要求,看例子!
>>> s = "Cat and Dog" >>> import fnmatch >>> fnmatch.fnmatch(s,"Cat*") True >>> fnmatch.fnmatch(s,"C*and*D?") False >>> fnmatch.fnmatch(s,"C*and*D*") True正則表達(dá)式查找替換
如果你需要查找比較復(fù)雜的字符規(guī)則,正則表達(dá)式是你不二的選擇。下面是正則查找的簡(jiǎn)單示例。
>>> import re >>> s = "We will fly to Thailand on 2016/10/31" >>> pattern = r"d+" >>> re.findall(pattern, s) ["2016", "10", "31"] >>> re.search(pattern, s) <_sre.SRE_Match object at 0x03A8FD40> >>> re.search(pattern, s).group() "2016"
接下來你可能需要用正則表達(dá)式去替換某些字符,那么你需要了解re.sub()方法,看例子。
>>> s = "I like {color} car." >>> re.sub(r"{color}","blue",s) "I like blue car." >>> s = "We will fly to Thailand on 10/31/2016" >>> re.sub("(d+)/(d+)/(d+)", r"3-1-2", s) "We will fly to Thailand on 2016-10-31"
其實(shí)re.sub()遠(yuǎn)比你相像的強(qiáng)大的多。在上面的例子里你可以替換類似于{color}這樣的模板字符,也可以把正則匹配到的所有分組調(diào)換順序,例如第二個(gè)例子一共匹配了3個(gè)分組,然后把第3個(gè)分組放到最前面 r"3-1-2",看明白了嗎?
接下來看另外一個(gè)例子。
s = "Tom is talking to Jerry." name1 = "Tom" name2 = "Jerry" pattern = r"(.*)({0})(.*)({1})(.*)".format(name1, name2) print re.sub(pattern, r"14325", s) # Jerry is talking to Tom.
其實(shí)你還可以自定義替換函數(shù),也就是re.sub()的第二個(gè)參數(shù)。
def change_date(m): from calendar import month_abbr mon_name = month_abbr[int(m.group(1))] return "{} {} {}".format(m.group(2), mon_name, m.group(3)) s = "We will fly to Thailand on 10/31/2016" pattern = r"(d+)/(d+)/(d+)" print re.sub(pattern, change_date, s) # We will fly to Thailand on 31 Oct 2016
最后給大家一個(gè)終極版的例子,里面用到了函數(shù)的閉包,著酸爽,你懂的!
def match_case(word): def replace(m): text = m.group() if text.isupper(): return word.upper() elif text.islower(): return word.lower() elif text[0].isupper(): return word.capitalize() else: return word return replace s = "LOVE PYTHON, love python, Love Python" print re.sub("python", match_case("money"), s, flags=re.IGNORECASE) # LOVE MONEY, love money, Love Money寫在最后
其實(shí)正則表達(dá)式還有很多玩法,如果你想讓正則和通配符混合著用,一點(diǎn)問題都沒有,因?yàn)?b>fnmatch還有一個(gè)translate()的方法,可以讓你把通配符無痛轉(zhuǎn)換成正則表達(dá)式,你愛怎么玩就怎么玩。
>>> fnmatch.translate("C*and*D*") "C.*and.*D.*"
關(guān)于作者:Python技術(shù)愛好者,目前從事測(cè)試開發(fā)相關(guān)工作,轉(zhuǎn)載請(qǐng)注明原文出處。
歡迎關(guān)注我的博客 http://betacat.online,你可以到我的公眾號(hào)中去當(dāng)吃瓜群眾。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44234.html
摘要:上一篇文章實(shí)用技法第篇正則文本模式的匹配和查找下一篇文章實(shí)用技法第篇正則以不區(qū)分大小寫的方式對(duì)文本做查找和替換需求 上一篇文章:Python實(shí)用技法第23篇:正則:文本模式的匹配和查找下一篇文章:Python實(shí)用技法第25篇:正則:以不區(qū)分大小寫的方式對(duì)文本做查找和替換 1、需求
摘要:上一篇文章實(shí)用技法第篇正則查找和替換文本下一篇文章實(shí)用技法第篇定義實(shí)現(xiàn)最短匹配的正則表達(dá)式需求 上一篇文章:Python實(shí)用技法第24篇:正則:查找和替換文本下一篇文章:Python實(shí)用技法第26篇:定義實(shí)現(xiàn)最短匹配的正則表達(dá)式 1、需求
摘要:假設(shè)現(xiàn)在想把字符串你好,,世界中的中文提取出來,可以這么做你好,,世界注意到,我們?cè)谡齽t表達(dá)式前面加上了兩個(gè)前綴,其中表示使用原始字符串,表示是字符串。本文標(biāo)題為正則表達(dá)式模塊簡(jiǎn)明筆記本文鏈接為參考資料正則表達(dá)式 簡(jiǎn)介 正則表達(dá)式(regular expression)是可以匹配文本片段的模式。最簡(jiǎn)單的正則表達(dá)式就是普通字符串,可以匹配其自身。比如,正則表達(dá)式 hello 可以匹配字符...
摘要:正則表達(dá)式就是用來描述他稱為正則集的代數(shù)的表達(dá)式,因此采用正則表達(dá)式這個(gè)術(shù)語(yǔ)。文本中正則表達(dá)式結(jié)束搜索的索引值與和方法的同名參數(shù)相同。對(duì)象是一個(gè)編號(hào)的正則表達(dá)式通過提供的一系列方法可以對(duì)文本進(jìn)行匹配查找。 一、概述 今天這篇文章帶領(lǐng)大家學(xué)習(xí)一下Python中的正則表達(dá)式,當(dāng)然了,正則表達(dá)式本身的內(nèi)容就足以寫好幾本書了,我們這里列出的內(nèi)容,僅僅是Python中常用的和基礎(chǔ)的一些內(nèi)容。 那...
摘要:反斜杠的困擾與大多數(shù)編程語(yǔ)言相同,正則表達(dá)式里使用作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾。文本中正則表達(dá)式結(jié)束搜索的索引。以元組形式返回全部分組截獲的字符串。用于指定最大分割次數(shù),不指定將全部分割。 1. 正則表達(dá)式基礎(chǔ) 1.1. 簡(jiǎn)單介紹 正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨(dú)特的語(yǔ)法以及一個(gè)獨(dú)立的處理引擎,效率上可能不如str自帶的方法...
閱讀 2115·2023-04-25 20:52
閱讀 2507·2021-09-22 15:22
閱讀 2134·2021-08-09 13:44
閱讀 1776·2019-08-30 13:55
閱讀 2820·2019-08-23 15:42
閱讀 2293·2019-08-23 14:14
閱讀 2886·2019-08-23 13:58
閱讀 3019·2019-08-23 11:49