Python:用字典中的实体替换某些Unicode实体

时间:2011-10-28 15:06:03

标签: python regex unicode backslash

我已经读过很多关于python字符串中反斜杠转义的问题(以及Python中不同编码的反斜杠识别)和在正则表达式中使用反斜杠,但仍然无法解决我的问题。我非常感谢任何帮助(链接,代码示例等)。

我正在尝试使用 re 将字符串中的十六进制代码替换为字典中的某些元素。代码的类型为'\ uhhhh',其中 hhhh 是十六进制数。

我从sqlite3表中选择字符串;默认情况下,它们被读取为unicode而不是“原始”unicode字符串。

import re
pattern_xml = re.compile(r"""
(.*?)                       
([\\]u[0-9a-fA-F]{4})
(.*?)                           
""", re.VERBOSE | re.IGNORECASE | re.DOTALL)
uni_code=['201C','201D']
decoded=['"','"']
def repl_xml(m):
    item=m.group(2)
    try: decodeditem=decoded[uni_code.index(item.lstrip('\u').upper())]
    except: decodeditem=item
    return m.group(1) + "".join(decodeditem) + m.group(3)

#input        
text = u'Try \u201cquotated text should be here\u201d try'
#text after replacement
decoded_text=pattern_xml.subn(repl_xml,text)[0]
#desired outcome
desired_text=u'Try "quotated text should be here" try'

所以,我希望_decoded_text_等于_desired_text _。

我没有成功用双反斜杠替换单反斜杠或强制python将文本视为原始unicode字符串(因此反斜杠的处理与字面意义相反,而不是像转义字符一样)。我也尝试使用re.escape(文本)并设置re.UNICODE,但在我的情况下没有帮助。
我正在使用Python 2.7.2。

可以找到解决此问题的方法吗?

编辑:
实际上,我已经通过将以下编码应用于输入,在StandardEncodingsPythonUnicodeIntegration上找到了解决此问题的可能方案:

text.encode('unicode_escape')

还有什么可做的吗?

1 个答案:

答案 0 :(得分:0)

示例文本不包含任何反斜杠。 \u201c只是表示unicode字符的一种方式:

>>> text = u'Try \u201cquotated text should be here\u201d try'
>>> '\\' in text
False
>>> print text
Try “quotated text should be here” try

这里不需要正则表达式。只需根据需要翻译目标unicode字符:

>>> table = {0x201c: u'"', 0x201d: u'"'}
>>> text.translate(table)
u'Try "quotated text should be here" try'