python 字串保留特定字元 全面總結

2021-10-08 12:49:49 字數 1899 閱讀 8265

leetcode上有一道很簡單的題目:

給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,忽略字母的大小寫。

將題目拆解成兩部分:

第一,處理字串,使其只保留字母和數字,且字母統一大小寫;

第二,驗證回文串。

本文先來講講第一部分。

改變字母大小寫很簡單,用內建函式即可。重點在於只保留字母和數字字元。

我首先想到的是正則。對於正則,我並不是很會。難者不會,會者不難,我覺得它太難了,完全不適合我這種又懶又笨的豬腦子,向來是現用現查。這一查,就查出兩種方法。

算上不用正則的,總計3種方案,且聽我一一道來。

re.sub(pattern, repl, string, count = 0, flags = 0)

這個函式一般只需要掌握前三個引數:

pattern,正則中的模式字串。

repl,希望被替換成的字串。

string,要被處理的原始字串。

返回處理過的字串。

如果完全不懂正規表示式,pattern還是挺難理解的。在以後的知識分享系列裡,我會寫一寫關於正規表示式的內容。

舉個例子:

re.sub("[a-za-z0-9]", "", mystr) # 把字串中的字母和數字都弄沒

第乙個引數,模式字串,表示所有的字母和數字;

第二個引數,希望被替換成的字串,是個空字串;

第三個引數,希望被處理的原始字串,變數名為mystr;

返回處理過的字串。

那麼替換的邏輯就很好理解了。想只保留某種字元,就把除了該類字元以外的所有字元都替換成空字串。

但這樣有點不方便。如果只想保留中文,那麼為了替換掉其他所有字元,就要在模式字串裡把其他所有型別的字元,包括字母、數字、特殊字元等等,全面地列舉一遍,寫不全的話就會有漏網之魚。

於是咱們改進一下做法:

re.sub("[^a-z^a-z^0-9]", "", mystr) # 只保留字母和數字,其他的都弄沒

把除了字母和數字以外的東西都弄沒。我可真是個小機靈鬼!

所以,如果想只保留中文,就可以這樣寫:

re.sub("[^\u4e00-\u9fa5]", "", mystr) # 只保留漢字,其他的都弄沒

這種思路就比較直截了當。

re.findall(pattern, string, flags = 0)

這個函式一般只需要掌握前兩個引數:

pattern,正則中的模式字串。

string,要被處理的原始字串。

返回所有與模式相匹配的字元的列表。

re.findall("[a-z]",mystr) # 返回字串中所有小寫字母的列表

得到列表之後,再來乙個把序列連線成字串的join方法,大功告成!

''.join(re.findall("[a-z]",mystr)) # 只保留小寫字母,其他的都弄沒

如果用正則,sub替換和findall查詢這兩種方法均可,用哪個就看個人喜好。

然而,做leetcode演算法題,一般來說是用不著呼叫庫的。

官方標答是如何做到只保留字母和數字的呢?請看:

sgood = "".join(ch.lower() for ch in s if ch.isalnum())

也就是第三種方法:

什麼叫專業啊?一般人,看什麼都覺得似曾相識,但是到了實際要用的時候就兩眼一抹黑,什麼都想不起來,比如我。而那些真正融會貫通、運用自如的人,才叫真的專業。

一開始看到python字串擁有一堆諸如isalnum(), isalpha(), isdigit(), islower(), isupper()函式的時候,我還不以為意,想不到竟有如此妙用!

令我稍感欣慰的是,經過測試,這個方法比用正則的執行速度慢。看來正則還是有其用武之地的!

只保留字串的特定字元,你學會了嗎?

下期預告:驗證回文串

python替換特定字串

python 字串替換是python操作字串的時候經常會碰到的問題,這裡簡單介紹下字串替換方法。python 字串替換可以用2種方法實現 1是用字串本身的方法。2用正則來替換字串 下面用個例子來實驗下 a hello word 我把a字串裡的word替換為python 1用字串本身的replace方...

字串去除特定字元

週六,剛顧著陪女朋友玩了,九度oj想ac一道簡單的題目,結果在scanf上遇到了點問題,唉,週六大好的時間就沒有深入研究,今天趁著來公司看了一下scanf實現機制,解決了 靠,蛋疼的csdn,剛才寫了一大堆竟然沒儲存,直接上 了 題目描述 輸入字串s和字元c,要求去掉s中所有的c字元,並輸出結果。輸...

python學習之字串刪除特定字元

語法 str replace old,new max 樣例 str this is string example.wow this is really string print str replace is was print str replace is was 3 print str 執行結果 ...