2017-01-30 61 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字符串。