2015-10-05 73 views
3

我的數據是按以下格式:與字母字符中選擇行只

data = [['@datumbox', '#machinelearning'], 
['@datumbox', '#textanalysis'], 
['@things_internet', '#iot'], 
['@things_internet', '#h...'], 
['@custmrcom', '#analytics123'], 
['@custmrcom', '#strategy...123'], 
['@custmrcom', '#1knowledgetweet'], 
['@tamaradull', '#@bigbrother']] 

我想檢查井號標籤中是否包含任何非字母。如果是這樣,相應的行將被刪除。

所需的輸出是:

data = [['@datumbox', '#machinelearning'], 
['@datumbox', '#textanalysis'], 
['@things_internet', '#iot']] 

我認爲需要使用應用re.sub(例如,re.compile( '[^ A-ZA-Z'))。這是我到目前爲止:

newdata = [] 

for item in data: 
    regex = re.compile('[^a-zA-Z]') 
    if regex.match(item[1]): 
     newdata.append([item[0], item[1]]) 

任何建議嗎?

+2

你能告訴你到目前爲止做了什麼? – idjaw

+0

請記住排除'#',因爲它是非字母字符。 – Nayuki

+0

#是哈希標籤,所以我想保留它。 – kevin

回答

10

使用列表理解與條件:

newdata = [x for x in data if x[1][1:].isalpha()] 
print newdata 

給人的輸出

[['@datumbox', '#machinelearning'], ['@datumbox', '#textanalysis'], ['@things_internet', '#iot']] 
3

答案很簡單:

for item in data: 
    if re.match("^#[A-Za-z]+$", item[1]): 
     newdata.append(item)