将unicode表示与符号进行比较

时间:2012-11-27 23:14:35

标签: python regex unicode

我有一个包含大量句子的数据文件,编码如下:

“Gib mir bitte Erk \ u00e4ltung”

我还有一个包含大量关键字的数据文件,编码如下:

“Erkältung”

我想在句子中搜索关键字,然后以“Erkältung”格式将它们写入文件。

如何将\ u00e4转换为ä而不必执行:

String.replace('\ u00e4','ä')

更确切地说,我希望在Python 2.6中返回一个匹配:

(#coding:utf-8)

sentence = "Gib mir bitte Erk\u00e4ltung"

keyword = "Erkältung"

re.search(keyword, line)

任何提示?

3 个答案:

答案 0 :(得分:3)

Python内置了一些方便的字符编码转换。在这种情况下,unicode_escape就是你想要的。当您阅读句子时,请在进行搜索之前将其转换为:

# Original sentence:

>>> s = "Gib mir bitte Erk\u00e4ltung"

>>> print s
Gib mir bitte Erk\u00e4ltung

>>> print repr(s)
'Gib mir bitte Erk\\u00e4ltung'


# Converted sentence:

>>> sc = s.decode('unicode_escape')

>>> print sc
Gib mir bitte Erkältung

>>> print repr(sc)
u'Gib mir bitte Erk\xe4ltung'

答案 1 :(得分:1)

要使用\u00e4编码字符读取文件,请使用

fp = open('sentence.txt', 'r')
sentence = fp.read().decode('unicode-escape')
fp.close()
print repr(sentence) # -> u'Gib mir bitte Erk\xe4ltung'

然后在不转义的情况下读取文件:

import codecs
fp = codecs.open('keyword.txt', 'r', encoding='utf-8')
keyword = fp.read()
fp.close()
print repr(keyword) # -> u'Erk\xe4ltung'

然后你们都有相同的格式

fp = codecs.open('result.txt', 'a', encoding='utf-8')
if re.search(keyword, sentence, re.UNICODE) :
    fp.write(sentence)
fp.close()

答案 2 :(得分:0)

非正则表达式解决方案(首选):

s = s.decode('unicode_escape')

正则表达式解决方案:

s = re.sub(r'\\u([a-fA-F0-9]{4})', lambda m: unichr(int(m.group(1), 16)), s)