2012-06-08 77 views
0

刪除字符我有這樣的元素列表:Python的 - 從列表

['1:{test}', '2:{test}', '4:{1989}', '9:{test}', ''] 

我的問題是:

我怎樣才能把這個列表的元素特定字符?

因此,我想有:

['test', 'test', '1989', 'test', ''] 

任何建議,解決方案?

在此先感謝。

回答

4
>>> re.findall(r'\{(.*)\}', '1:{test}') 
['test'] 

只是做一個環與它:

[(re.findall(r'\{(.*)\}', i) or [''])[0] for i in your_list] 

或可能:

[''.join(re.findall(r'\{(.*)\}', i)) for i in your_list] 
+0

謝謝,我讀了正則表達式,我喜歡你的anwser。 –

1

你可以使用正則表達式,像這樣:

import re 

s = re.compile("\d+:{(.*)}") 

data = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', ''] 

result = [s.match(d).group(1) if s.match(d) else d for d in data] 

結果

['test', 'test', '1989', 'test', ''] 
+0

你應該去詳細講述如何幫助或如何處理它「任何形式的至少一個字符」。 – Daenyth

+0

@Daenyth:是的,謝謝 - 我正在爲此努力。我不想在代碼正確測試之前發佈代碼。 –

0

Python的strip()功能正是這麼做的 - 刪除從字符串的兩端特定字符 - 但有可能有更好的方法來做你想做的事情。

+1

你不會有一個簡單的時間使用帶... –

0

您還沒有確切的說模式是什麼,或者你想要的東西,如果沒有大括號,但是這會對你的例子起作用:

stripped = [] 
for x in my_data: 
    m = re.search("{.*}", x) 
    stripped.append(m.group if m else x) 
0
t = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', ''] 
map(lambda string: re.search(r'(?<=\{).+(?=\})', string).group(0), t) 

當然,這不是格式最好或最容易閱讀的答案。這映射了一個匿名函數,用於查找並返回括號內的內容到列表的每個元素,並返回整個列表。

(?<=...)的意思是「只匹配了這開頭,但不包括它的結果

(?=...)的意思是」只匹配了這個底,但不包括它的結果

.+意味着

+0

'。+'表示*任意類型的一個或多個*字符 –

+0

對不起,你完全正確,修復它時我拿出「一個或多個」 – jdotjdot