2011-01-12 109 views
2

我需要從數據文件的某個列中提取一個字符串,並根據該字符串中包含的內容對該字符串執行一些算法。如果字符串包含 iPhone,iPad等我需要運行算法'A',如果它包含Android,Symbian等我需要運行算法'B'。如何在Python中搜索一組字符串中的一個

我從來沒有做過Python,但我有一個現有的Python腳本,我需要輸入這個邏輯。如何使IF命令的邏輯測試字符串是否包含這些子字符串中的任何一個?我使用某種正則表達式還是有一些簡單的方法來在Python中做到這一點。

這些字符串是用戶代理字符串如

Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20 

Mozilla/5.0 (Linux; U; Android 1.6; en-us; A-LINK PAD ver.1.9.1_1 Build/Donut) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 

的算法從一個安裝Python包一樣簡單稱爲

AlgorithmA(some_other_string) 
AlgorithmB() 

所以第一算法需要一個參數,而第二不。

基於文本,我們得到的變量

search_algorithm = AlgorithmA(some_other_string) 
       or 
search_algorithm = AlgorithmB() 

,這是作爲參數傳遞給另一個函數

output = func(user_agent, search algorithm) 
+2

請你能提供你的輸入數據的樣本嗎? – MattH

+0

@MattH,這些是來自Web瀏覽器的用戶代理字符串。 – sfactor

回答

4

你可以不用正則表達式:

def funcA(text): 
    ... 

def funcB(text): 
    ... 

algo = (('iPhone', funcA), 
     ('Android', funcA), 
     ('Symbian', funcA), 
     ('Dell', funcB), 
     ('Asus', funcB), 
     ('HP', funcB)) 

text = '... your text ...' 

for word, func in algo: 
    if word in text: 
     func(text) 
+0

你實際上並沒有使用字典功能;從邏輯上講,你需要的是一個2元組的元組。 –

+0

@John - 你是對的,修好了,謝謝! – eumiro

相關問題