刪除字符我有這樣的元素列表:Python的 - 從列表
['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
我的問題是:
我怎樣才能把這個列表的元素特定字符?
因此,我想有:
['test', 'test', '1989', 'test', '']
任何建議,解決方案?
在此先感謝。
刪除字符我有這樣的元素列表:Python的 - 從列表
['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
我的問題是:
我怎樣才能把這個列表的元素特定字符?
因此,我想有:
['test', 'test', '1989', 'test', '']
任何建議,解決方案?
在此先感謝。
>>> 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]
你可以使用正則表達式,像這樣:
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', '']
你應該去詳細講述如何幫助或如何處理它「任何形式的至少一個字符」。 – Daenyth
@Daenyth:是的,謝謝 - 我正在爲此努力。我不想在代碼正確測試之前發佈代碼。 –
您還沒有確切的說模式是什麼,或者你想要的東西,如果沒有大括號,但是這會對你的例子起作用:
stripped = []
for x in my_data:
m = re.search("{.*}", x)
stripped.append(m.group if m else x)
t = ['1:{test}', '2:{test}', '4:{1989}', '9:{test}', '']
map(lambda string: re.search(r'(?<=\{).+(?=\})', string).group(0), t)
當然,這不是格式最好或最容易閱讀的答案。這映射了一個匿名函數,用於查找並返回括號內的內容到列表的每個元素,並返回整個列表。
(?<=...)
的意思是「只匹配了這開頭,但不包括它的結果
(?=...)
的意思是」只匹配了這個底,但不包括它的結果
.+
意味着
'。+'表示*任意類型的一個或多個*字符 –
對不起,你完全正確,修復它時我拿出「一個或多個」 – jdotjdot
謝謝,我讀了正則表達式,我喜歡你的anwser。 –