手把手教你查找字符串中包含的多個元素
大家好,我是Python進(jìn)階者。
前言
前幾天在才哥交流群里,有個叫【華先生】的粉絲在Python交流群里問了一道關(guān)于Python字符串基礎(chǔ)的問題,初步一看覺得很簡單,實際上也確實不難,題目如下圖所示。
問題:如何查找字符串中包含的多個元素。比如某個字符串中包含“宿舍”或“公寓”或“酒店”任何一個,則返回1。
解決思路
上圖中【是小董呀、】大佬提出使用列表硬上,【Barry】大佬提出用正則,也有【dcpeng】大佬提出用any()、all()函數(shù),當(dāng)然了,還有很多方法可以解決,也歡迎大家留言區(qū)留言或者私信我分享答案。
這里我綜合大家給的答案,整理了三個實現(xiàn)方案,下面一起來看看吧!
解決方法
方法一
這里給出【才哥】提供的代碼,使用了any()函數(shù),恰到好處,下面直接來看代碼吧!
- s = '宿舍 餓了 酒店'
- any([x in s for x in ['宿舍', '公寓', '酒店']])
方法二
這里給出小小明大佬的代碼,直接正則安排。
- import re
- text = '宿舍 餓了 酒店'
- re.search('宿舍|公寓|酒店', text)
方法三
這里給出【海心廣告1】大佬的代碼,本質(zhì)上也是正則,只不過這里完全是根據(jù)題意去行事的,如果確定存在,則返回1。
- # coding: utf-8
- import re
- def find_kw(text):
- kw = ['宿舍', '公寓', '酒店']
- for k in kw:
- f_t = re.search(k, text) # 如果字符串中含有關(guān)鍵字,則返回True,否則返回None
- if f_t:
- return 1
- if __name__ == '__main__':
- text = '我住在希爾頓酒店'
- result = find_kw(text)
- if result:
- print(result) # 返回1后,打印返回值1,否則不打印任何值
當(dāng)時代碼分享之后,【冫馬讠成】大佬還特意問了一句,如果就是要求有返回值1,那怎么辦呢?答案其實已經(jīng)在上面了,當(dāng)然了,結(jié)合方法一和方法二,尤其是方法一,你完全可以將any()函數(shù)替換成你自己自定義的一個返回值為1的函數(shù),只要后面的推導(dǎo)式查得到不為空,就有戲。
總結(jié)
我是Python進(jìn)階者。本文基于粉絲針對Python字符串的提問,給出了一個利用Python基礎(chǔ)+正則表達(dá)式處理的解決方案,完全滿足了粉絲的要求。