在使用Python进行iso-2022-jp编码时使用regex



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

示例:まだ 正式 に 決まっ た わけ で は ない の で 。

根据重新库文档,它可以接受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']

我做错了什么?谢谢

您的代码适合我。(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)

最新更新