摘要:最簡單的查找替換在中查找和替換非常簡單,如果當前對象是一個字符串時,你可以使用該類型提供的或者方法查找指定的字符,如果能找到則會返回字符第一次出現的索引,如果不存在則返回。下面是正則查找的簡單示例。
最簡單的查找替換
在Python中查找和替換非常簡單,如果當前對象是一個字符串str時,你可以使用該類型提供的find()或者index()方法查找指定的字符,如果能找到則會返回字符第一次出現的索引,如果不存在則返回-1。
>>> s = "Cat and Dog" >>> s.find("Dog") 8 >>> s.index("Dog") 8 >>> s.find("Duck") -1
如果要替換目標字符串,用replace()方法就好了。
>>> s = "Cat and Dog" >>> s.replace("Cat", "Dog") "Dog and Dog"通配符查找匹配
當然,如果你覺得上面的功能還不能滿足你,你想使用通配符來查找字符串?沒問題!fnmatch這個庫就能滿足你的要求,看例子!
>>> 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正則表達式查找替換
如果你需要查找比較復雜的字符規則,正則表達式是你不二的選擇。下面是正則查找的簡單示例。
>>> 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"
接下來你可能需要用正則表達式去替換某些字符,那么你需要了解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"
其實re.sub()遠比你相像的強大的多。在上面的例子里你可以替換類似于{color}這樣的模板字符,也可以把正則匹配到的所有分組調換順序,例如第二個例子一共匹配了3個分組,然后把第3個分組放到最前面 r"3-1-2",看明白了嗎?
接下來看另外一個例子。
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.
其實你還可以自定義替換函數,也就是re.sub()的第二個參數。
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
最后給大家一個終極版的例子,里面用到了函數的閉包,著酸爽,你懂的!
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寫在最后
其實正則表達式還有很多玩法,如果你想讓正則和通配符混合著用,一點問題都沒有,因為fnmatch還有一個translate()的方法,可以讓你把通配符無痛轉換成正則表達式,你愛怎么玩就怎么玩。
>>> fnmatch.translate("C*and*D*") "C.*and.*D.*"
關于作者:Python技術愛好者,目前從事測試開發相關工作,轉載請注明原文出處。
歡迎關注我的博客 http://betacat.online,你可以到我的公眾號中去當吃瓜群眾。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44234.html
摘要:上一篇文章實用技法第篇正則文本模式的匹配和查找下一篇文章實用技法第篇正則以不區分大小寫的方式對文本做查找和替換需求 上一篇文章:Python實用技法第23篇:正則:文本模式的匹配和查找下一篇文章:Python實用技法第25篇:正則:以不區分大小寫的方式對文本做查找和替換 1、需求
摘要:上一篇文章實用技法第篇正則查找和替換文本下一篇文章實用技法第篇定義實現最短匹配的正則表達式需求 上一篇文章:Python實用技法第24篇:正則:查找和替換文本下一篇文章:Python實用技法第26篇:定義實現最短匹配的正則表達式 1、需求
摘要:假設現在想把字符串你好,,世界中的中文提取出來,可以這么做你好,,世界注意到,我們在正則表達式前面加上了兩個前綴,其中表示使用原始字符串,表示是字符串。本文標題為正則表達式模塊簡明筆記本文鏈接為參考資料正則表達式 簡介 正則表達式(regular expression)是可以匹配文本片段的模式。最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 hello 可以匹配字符...
摘要:正則表達式就是用來描述他稱為正則集的代數的表達式,因此采用正則表達式這個術語。文本中正則表達式結束搜索的索引值與和方法的同名參數相同。對象是一個編號的正則表達式通過提供的一系列方法可以對文本進行匹配查找。 一、概述 今天這篇文章帶領大家學習一下Python中的正則表達式,當然了,正則表達式本身的內容就足以寫好幾本書了,我們這里列出的內容,僅僅是Python中常用的和基礎的一些內容。 那...
摘要:反斜杠的困擾與大多數編程語言相同,正則表達式里使用作為轉義字符,這就可能造成反斜杠困擾。文本中正則表達式結束搜索的索引。以元組形式返回全部分組截獲的字符串。用于指定最大分割次數,不指定將全部分割。 1. 正則表達式基礎 1.1. 簡單介紹 正則表達式并不是Python的一部分。正則表達式是用于處理字符串的強大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法...
閱讀 2092·2023-04-25 20:52
閱讀 2473·2021-09-22 15:22
閱讀 2122·2021-08-09 13:44
閱讀 1766·2019-08-30 13:55
閱讀 2804·2019-08-23 15:42
閱讀 2278·2019-08-23 14:14
閱讀 2871·2019-08-23 13:58
閱讀 3002·2019-08-23 11:49