在Python上使用iso-2022-jp编码的正则表达式

时间:2013-07-30 08:14:20

标签: encoding unicode python-3.x

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

实施例。 :     まだ正式に决まったわけではないので。

根据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']

我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分: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']

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


<强> UPDATE2

如果您从文件中读取文本,则无需解码单个行。在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)