Python: 如何使用正则表达式从字符串中去除 \u200b?

12

我有一个网页爬虫,将论坛问题分成单个词并将其写入文本文件。这些单词存储在一组元组的列表中。每个元组包含单词及其频率。就像这样...

[(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)

然而,论坛上一些人使用了字符 \u200b,这破坏了我的代码,因为该字符不再是Unicode空白字符。

(u'used\u200b', 1)

打印不会出现错误,但写入文本文件会出错。我发现 string.strip()string.replace() 都没有用,所以想知道如何使用正则表达式库来去掉那个字符。我计划遍历整个元组列表来找到它。


为什么您说这不是Unicode空格字符?这确实就是它。U+200B - tripleee
1个回答

20

我测试了Python 2.7,replace的表现符合预期:

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

and so does strip:

同样适用于strip:

>>> 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')

请参考以下资源:


1
split()replace都不是合适的方法,因为您并不总是会遇到\u200 - Mazdak
@Kasramvd,你可以给strip函数传递多个字符作为参数。而且还有很多替换多个字符的方法(例如使用正则表达式)。 - roeland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接