2017-01-30 60 views
0

嗨,我試圖刪除所有以反斜槓開頭的令牌。下面是我的代碼,並沒有刪除令牌。另外我如何使用正則表達式來做到這一點?在python中刪除以反斜槓開頭的令牌

tokens = [u'#hamandcheesecroissant', u'\u1026',u'#whoopwhoop', u'\u2026', u'jose', u'mourinho', u'refusing', u'acknowledge', u'lost'] 
new_tokens = [] 
for token in tokens: 
    if token.startswith('\\'): 
    new_tokens.append(token) 
+0

'tokens'的內容是什麼? – qxz

+0

在Python中,如果您在'for'中使用此列表,則不應從列表中刪除元素 - 因爲remove()向後移動所有元素,下一個循環可跳過下一個元素。更好地創建您想要保留的元素的新列表。 – furas

+3

'\ u'文本中不存在 - 它只是將unicode字符放在文本中的方法。所以你沒有帶\「'u'\ u1026''的文本 - 但單個字符''' – furas

回答

1

u'\u1026'是一個帶有單個字符的unicode字符串。該字符串沒有實際的反斜槓字符。我建議你對Python字符串中的\u語法做一些研究。

0

對Unicode字符進行編碼時,它們佔用2個或更多字節。所以一個方法來計算出,如果一個字符串包含Unicode字符是比較長:

>>> tokens = [u'#hamandcheesecroissant', u'\u1026',u'#whoopwhoop', u'\u2026', u'jose', u'mourinho', u'refusing', u'acknowledge', u'lost'] 
>>> [t for t in tokens if (len(t)==len(t.encode()))] 
['#hamandcheesecroissant', '#whoopwhoop', 'jose', 'mourinho', 'refusing', 'acknowledge', 'lost'] 

您可以修改上面的邏輯來過濾單字符的Unicode字符串。