0

我有一些 ISO-2022-JP 编码文本。

前任。:まだ正式に决まったわけではないので。</p>

根据 re 库文档,它可以接受 ascii 和 unicode,所以我尝试将我的文本转换为 unicode 并在单词级别进行剪切:

text.decode('iso-2022-jp')
print(text)
print(re.findall(r"[\w']+", text))

但是,这是我得到的输出类型:

まだ 正式 に 決まっ た わけ で は ない の で 。
['B', 'B', 'B', 'B', 'B', '5', '0', 'B', 'B', 'K', 'B', 'B7h', 'C', 'B', 'B', 'B', 'B', 'o', '1', 'B', 'B', 'G', 'B', 'B', 'O', 'B', 'B', 'J', 'B', 'B', 'N', 'B', 'B', 'G', 'B', 'B', 'B']

我做错了什么?谢谢!

4

1 回答 1

0

你的代码对我有用。(Python 3.3.0)

>>> text = "まだ 正式 に 決まっ た わけ で は ない の で 。"
>>> print(text)
まだ 正式 に 決まっ た わけ で は ない の で 。
>>> import re
>>> re.findall(r"[\w']+", text)
['まだ', '正式', 'に', '決まっ', 'た', 'わけ', 'で', 'は', 'ない', 'の', 'で']

顺便说一句,您没有将解码的字符串分配给文本。

text = text.decode('iso-2022-jp')

更新

如果我将文本解码为 ascii(丢弃非 ascii 字符),我会得到以下结果。

>>> re.findall(r"[\w']+", text.encode('iso-2022-jp').decode('ascii', 'ignore'))
['B', 'B', 'B', '5', '0', 'B', 'B', 'K', 'B', 'B7h', 'C', 'B', 'B', 'B', 'B', 'o', '1', 'B', 'B', 'G', 'B', 'B', 'O', 'B', 'B', 'J', 'B', 'B', 'N', 'B', 'B', 'G', 'B', 'B', 'B']

好像你解码/编码不正确。


更新2

如果您从文件中读取文本,则不需要解码单个行。open()在调用中指定编码。

import re
with open('results', 'r', encoding='iso-2022-jp') as f:
    for line in f:
        matches = re.findall(r"[\w']+", line)
        if matches:
            print(matches)
于 2013-07-30T08:21:21.580 回答