是否可以刪除列表中不包含正則表達式字符串的所有項目?刪除列表中不包含正則表達式字符串的所有項目
我在想也許只返回一個正則表達式字符串,如果沒有一個,使列表項爲空,然後第二次遍歷列表刪除所有空條目,但這似乎效率低下。
有什麼想法?
例如,可以說我有:
["cat", "dog", "monkey", "Fred", "sad"]
,我寫一個正則表達式,只有選擇對悲傷。我希望所有其他人都(最好)被刪除。
是否可以刪除列表中不包含正則表達式字符串的所有項目?刪除列表中不包含正則表達式字符串的所有項目
我在想也許只返回一個正則表達式字符串,如果沒有一個,使列表項爲空,然後第二次遍歷列表刪除所有空條目,但這似乎效率低下。
有什麼想法?
例如,可以說我有:
["cat", "dog", "monkey", "Fred", "sad"]
,我寫一個正則表達式,只有選擇對悲傷。我希望所有其他人都(最好)被刪除。
做到這一點,最簡單的方法是使用列表理解來構建一個新的列表:
regex = re.compile(...)
new_list = [s for s in old_list if regex.match(s)]
,或者使用filter()
:
new_list = filter(regex.match, old_list)
這是代碼:wordlist = ['sad','mad','im','cats','dogs','goats'] new_list = [s for s in tweets if re.match(wordlist)] print new_list – 2012-07-08 00:00:24
獲取「match()至少需要2個參數」 – 2012-07-08 00:00:40
哦,等等,看着.compile - 你不能編譯列表。 – 2012-07-08 00:06:52
import re
filters = ['^sad', '^.*ed$']
expressions = [re.compile(x) for x in filters]
words = ['cat', 'dog', 'monkey', 'fred', 'sad', 'saddening']
filtered_list = [s for s in words if any(re.match(s) for re in expressions)]
輸出:
['fred', 'sad', 'saddening']
你需要重寫你的問題,以更清晰關於你想要什麼。你在尋找正則表達式和字符串之間的一對一匹配嗎?或者你是否試圖用每個正則表達式(笛卡爾積)來測試每個字符串? – 2012-07-08 01:59:56
好的,我有一個單詞列表。我想通過這個列表,並將其與另一個短語列表進行比較,並檢查第一個列表中的任何單詞是否在第二個列表中,並記錄每個單詞的發生次數。 – 2012-07-08 16:02:56