2013-07-23 30 views
0

真的需要這樣一些幫助求你的Python:字符串全字匹配,並附加發現

我有一個列表中的順序列出:

mylist = "Cell Contents (Column Percentage, Counts, Statistical Test Results), Statistics (Overlap)" 

我想找到下面的話在mylist中:

'Statistical Test Results' 
'Counts' 
'Column Percentage' 

一旦找到了,我想將它們按mylist中出現的順序附加到新列表中。因此,新的名單應爲:

newlist = ['Column Percentage','Counts','Statistical Test Results'] 

我知道如何找到一個字並用一個for循環,並追加到一個新的列表,但我也不太清楚如何找到多個單詞,並在它們附加爲了在原始列表中找到它們。

謝謝!

+1

你是在尋找特定的術語,還是隻是任何單詞?你怎麼知道你正在尋找哪些詞?您可以使用正則表達式輕鬆找到它們。 – drz

+0

我在找這些詞:'統計測試結果','計數','列百分比'。他們肯定會出現在「mylist」中,但他們的順序可能會改變。 –

+0

「mylist」實際上是一個列表還是一個字符串? –

回答

2

我匹配第一對括號之間的內容:

re.finditer(r'\((.*?)\)', mylist).next().groups()[0].split(', ') 
['Column Percentage', 'Counts', 'Statistical Test Results'] 

re.finditera regular expression search

  • 所述第一參數的圖案:它告訴搜索括號之間的第一項
  • 注意使用裏面的?使其不貪心,避免匹配太大...要理解,刪除它並測試
  • 我們想要捕捉圓括號內的表達式,這就是爲什麼我們在模式中有括號的原因。請注意在字符串中匹配的轉義括號\(\)之間的差異,並且捕獲的()未被轉義。

finditer返回一個迭代器,它有效果之後,纔會使其與next運行。現在我們要獲取字符串的捕獲部分:這是groups方法([0]獲取第一個也是唯一一個,但可以使用正則表達式捕獲多個部分)。

然後我們把昏迷的結果分開,我們就完成了!

+1

非常感謝!你介意告訴我這裏發生了什麼,所以我可以學習嗎? –

+1

爲什麼'finditer()。next()'而不是'search()'? –

+0

@ Boosted_d16:謝謝你的接受!我編輯了我的問題來詳細說明。 @Tim:我只是想要第一個,這就是爲什麼,但我同意我可以使用're.search'或're.findall'。 – Emmanuel