我有这样的字符串:
ꐊ,ꀵ,\u0f6e,ⴗ,ꦚ,\u2d75,ꢯ,⾌,\ua97d,⩱,ㇴ,\u2d6e,鼺,\x00Ꞁ
我想过滤掉所有这些以斜杠开头的无效字符,我正试图用 Python 中的正则表达式来做。
它确实是这样工作的:
re.sub(r",\u0f6e,", r",deleted,", s)
但不是这样的:
re.sub(r",\.{5},", r",deleted,", s)
它应该根据 http://pythex.org 工作,所以我想这是因为它们是无效字符?我怎样才能匹配它们?
编辑:@metatoaster 说我的问题不明确: 问题的出现似乎是因为输入字符串 s 不是原始字符串。
>>> s = ' ꐊ,ꀵ,\u0f6e,ⴗ,ꦚ,\u2d75,ꢯ,⾌,\ua97d,⩱,ㇴ,\u2d6e,鼺,\x00Ꞁ'
>>> re.sub(r",\u0f6e,", r",deleted,", s)
' ꐊ,ꀵ,deleted,ⴗ,ꦚ,\u2d75,ꢯ,⾌,\ua97d,⩱,ㇴ,\u2d6e,鼺,\x00Ꞁ'
请您参考如下方法:
您的字符串似乎带有未定义的 Unicode 代码点。 \u0f6e 是表示为转义码的单个代码点。示例:
>>> s = 'ꐊ,ꀵ,\u0f6e,ⴗ,ꦚ,\u2d75,ꢯ,⾌,\ua97d,⩱,ㇴ,\u2d6e,鼺,\x00Ꞁ'
>>> s
'ꐊ,ꀵ,\u0f6e,ⴗ,ꦚ,\u2d75,ꢯ,⾌,\ua97d,⩱,ㇴ,\u2d6e,鼺,\x00Ꞁ'
>>> print(s)
ꐊ,ꀵ,,ⴗ,ꦚ,,ꢯ,⾌,,⩱,ㇴ,,鼺, Ꞁ
注意打印字符串如何将字符显示为未定义的框。它显示为用于调试目的的转义码。这些代码点有一些共同点。根据 Unicode 数据库,它们是 C 类(控制)代码点。他们也没有名字。一种快速过滤的方法是:
>>> ''.join(['deleted' if ud.category(c)[0] == 'C' else c for c in s])
'ꐊ,ꀵ,deleted,ⴗ,ꦚ,deleted,ꢯ,⾌,deleted,⩱,ㇴ,deleted,鼺,deletedꞀ'
