簡體   English   中英

將unicode字符串拆分為單詞

[英]splitting unicode string into words

我試圖將Unicode字符串拆分為單詞(簡單化),如下所示:

print re.findall(r'(?u)\w+', "раз два три")

我期望看到的是:

['раз','два','три']

但我真正得到的是:

['\xd1', '\xd0', '\xd0', '\xd0', '\xd0\xb2\xd0', '\xd1', '\xd1', '\xd0']

我究竟做錯了什么?

編輯:

如果我在字符串前面使用u

print re.findall(r'(?u)\w+', u"раз два три")

我明白了:

[u'\u0440\u0430\u0437', u'\u0434\u0432\u0430', u'\u0442\u0440\u0438']

編輯2:

Aaaaand似乎我應該首先閱讀文檔:

 print re.findall(r'(?u)\w+', u"раз два три")[0].encode('utf-8')

會給我:

раз

只是為了確保,這聽起來像是接近它的正確方法嗎?

你實際上是在unicode案例中獲得了你期望的東西。 你只是認為你不是因為你正在查看字符串的重復 ,而不是打印他們未轉義的值這一事實。 (這就是列表的顯示方式。)

>>> words = [u'\u0440\u0430\u0437', u'\u0434\u0432\u0430', u'\u0442\u0440\u0438'] 
>>> for w in words:
...     print w # This uses the terminal encoding -- _only_ utilize interactively
... 
раз
два
три
>>> u'раз' == u'\u0440\u0430\u0437'
True

不要錯過我關於打印這些unicode字符串的評論。 通常,如果您要將它們發送到屏幕,文件,電線等,您需要手動將它們編碼為正確的編碼。 當您使用print ,Python會嘗試利用終端的編碼,但只有在有終端時才能這樣做。 因為您通常不知道是否存在,所以您應該只在交互式解釋器中依賴它,並且總是以明確的方式編碼為正確的編碼。

在這種簡單的空白分割方法中,您可能根本不想使用正則表達式而只是使用unicode.split方法。

>>> u"раз два три".split()
[u'\u0440\u0430\u0437', u'\u0434\u0432\u0430', u'\u0442\u0440\u0438']

你的top(bytestring)示例不起作用,因為re基本上假設所有字節串都是ASCII語義,但是你的字符串不是。 使用unicode字符串可以為您的字母和區域設置獲得正確的語義。 盡可能使用unicode而不是str來表示文本數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM