2015-07-20 461 views
4

我有一个网页抓取工具,它将论坛问题分解成单个单词并将其写入文本文件。单词存储在一个元组列表中。每个元组都包含这个词和它的频率。是这样的...Python:使用正则表达式从字符串中去除 u200b

[(u'move', 3), (u'exploration', 4), (u'prediction', 21), 
(u'find', 5), (u'user', 2), (u'interface', 2), (u'pleasant', 2), 
(u'am', 11), (u'puzzled', 2), (u'find', 5), (u'way', 5), 
(u'prediction', 21), (u'mode', 2), (u'have', 21), 
(u'explored', 2), (u'file', 9), (u'Can', 7), (u'help', 6), 
(u'Possible', 1), (u'bug', 2), (u'data', 31), (u'is', 17) 

然而,在论坛上一些人用它打破我的代码,因为这个角色不再是一个Unicode空白字符\ u200b。

(u'used\u200b', 1) 

打印出来并不会产生错误,但是写入文本文件却有问题。我发现string.strip()string.replace()没有帮助,所以我想知道如何使用正则表达式库来摆脱该字符。我打算通过解析整个元组列表来找到它。

回答

3

我测试了python 2.7。 replace按预期工作:

>>> u'used\u200b'.replace(u'\u200b', '*') 
u'used*' 

也是如此条:

>>> u'used\u200b'.strip(u'\u200b') 
u'used' 

只要记住,参数这些功能必须是Unicode文本。它应该是u'\u200b',而不是'\u200b'。在开始时注意u

实际上,将该字符写入文件可以很好地工作。

>>> import codecs 
>>> f = codecs.open('a.txt', encoding='utf-8', mode='w') 
>>> f.write(u'used\u200bZero') 

见资源:

+0

'分裂()'和'replace'不正确的方式,因为你不会遭遇总是用'u200'。 – Kasramvd

+0

@Kasramvd你可以给一个以上的字符作为'strip'的参数。还有很多方法可以替换多个字符(例如使用正则表达式)。 – roeland

+0

.replace在Python3.5中运行良好 –

相关问题