使用正则表达式将 Unicode 代码点替换为实际字符

Replace Unicode code point with actual character using regex

我有一个大文件,其中任何不在 UTF-8 中的 unicode 字符都被其在尖括号中的代码点替换(例如,“”被转换为“”)。现在我想用正则表达式替换来恢复它。

我已经尝试用

完成这个

re.sub(r'<U\+([A-F0-9]+)>',r'\U', str)

但显然这行不通,因为我们无法将组插入到此 unicode 转义中。 best/easiest 的方法是什么?我发现许多问题试图做完全相反的事情,但对 're-encode' 这些代码点作为实际字符没有任何用处...

当你有一个字符的数字时,你可以ord(number)得到那个数字的字符。

因为我们有一个字符串,所以我们需要将其读取为 16 进制的 int。

两者加在一起:

>>> chr(int("0001F44D", 16))
''

不过,现在我们有一个小功能,不是简单替换字符串! Quick search returned that you can pass a function to re.sub

现在我们得到:

re.sub(r'<U\+([A-F0-9]+)>', lambda x: chr(int(x.group(1), 16)), my_str)

PS 不要只命名你的字符串 str - 你会掩盖内置的 str 含义类型。