4

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

"Gib mir bitte Erk\u00e4ltung"

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

“Erkältung”

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

我如何将 \u00e4 转换为 ä 而不必这样做:

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

更确切地说,我想让它在 Python 2.6 中返回一个匹配项:

(#编码:utf-8)

sentence = "Gib mir bitte Erk\u00e4ltung"

keyword = "Erkältung"

re.search(keyword, line)

有什么提示吗?

4

3 回答 3

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'
于 2012-11-27T23:39:54.630 回答
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()
于 2012-11-27T23:47:09.400 回答
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)
于 2012-11-27T23:48:29.477 回答