Python - 转义4位转义的unicode字符

时间:2017-01-30 20:19:26

标签: python regex unicode

我下载了网站的源代码。通过下载源代码并将其转换为字符串,许多字符(如单引号('),双引号(“),斜角括号(<,>)和正斜杠(/))现在都是双重逃脱。

示例:

s = '\\u2018this \\/ that\\u2019'

网站上显示的文字,以及打印时我想要的方式是:

this / that

我的第一直觉是使用正则表达式查找2个反斜杠的所有实例,并用一个反斜杠替换它,然后使用str.encode('utf-8').decode('utf-8')将4位转义的Unicode字符转换为它们的实际字符:

import re
sample = '\\u2018this \\/ that\\u2019'
pattern = r'(\\)\\\1'
double_escapes_removed = re.sub(pattern, '', text)
final_text = text.encode('utf-8').decode('utf-8')

print(final_text)应返回this / that,但返回的字符串似乎完全不变:\u2018this \/ that\u2019

我用re.findall(pattern, text)单独测试了模式,并成功找到了3个双反斜杠实例。除此之外,我不知道出了什么问题

1 个答案:

答案 0 :(得分:1)

事实证明这有点困难。问题的一个重要部分是虽然'\ u2018'是6个字符,'\ u2018'是单个字符的表示,所以你不能只用'\ u'替换'\ u'并让它工作。

这可以让你在大多数情况下无需使用正则表达式手动迭代转义:

>>> s.encode('ascii').decode('unicode-escape')
<<< '‘this \\/ that’'

Python 3确实输出一个关于'\/'是无效的unicode转义序列的警告,所以你可能想要先处理它们。