Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Getting rid of \u200b from a string using regular expressions

I have a web scraper that takes forum questions, splits them into individual words and writes it to the text file. The words are stored in a list of tuples. Each tuple contains the word and its frequency. Like so...

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

however, some person on the forum used the character \u200b which breaks all my code because that character is no longer a Unicode whitespace.

(u'used\u200b', 1)

Printing it out does not produce an error, but writing to a text file does. I have found that string.strip() and string.replace() do not help, so I was wondering how to use the regex library to get rid of that character. I plan on parsing through the entire list of tuples to find it.

like image 350
ceilingfan999 Avatar asked Jul 20 '15 17:07

ceilingfan999


1 Answers

I tested that with python 2.7. replace works as expected:

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

and so does strip:

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

Just remember that the arguments to those functions have to be Unicode literals. It should be u'\u200b', not '\u200b'. Notice the u in the beginning.

And actually, writing that character to a file works just fine.

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

See resources:

  • The python 2 Unicode howto
  • The python 3 Unicode howto
  • The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
like image 67
roeland Avatar answered Sep 19 '22 18:09

roeland