我试图在我的Python Jupyter Notebook(Python 3.6)中删除下面字符串中的“\ u3000”,“\ t”,“\ n”和“\ ax03”。
string = "\u3000\u3000(三)履行服务\n贸易领域\t开放承诺 \ax03"
re.sub("\\[a-z0-9]+", "", string)
然而,这并没有返回我想要的,尽管这种模式在Notepad ++中完美运行。
要在程序中输入文字Unicode字符,可以选择:直接输入字符,例如“a”,或使用特殊字符序列,例如“\ U3000”。 Unicode HOWTO的Python 3文档中提供了大量信息。
在Notepad ++中尝试它时发生的事情是它使用了你输入的实际字符而没有进一步解释它们,所以当你看到“\ u3000”它真的是一个反斜杠,一个“你”,一个“3”,一个“0” ,“0”,最后“0”。
但是,在Python代码中它看到了“\ u”并且想到了啊!这是一个Unicode字符,让我从接下来的四个十六进制字符中找出代码点是什么。 (3000十六进制=十进制12288。)
如果您打印字符串,由于输出限制,它可能会在\ u格式中显示它们。但是我们可以通过迭代字符串并输出每个字符的ord()值来显示字符的实际代码点:
>>> string = "\u3000\u3000(三)履行服务\n贸易领域\t开放承诺 \ax03"
>>> string
'\u3000\u3000(三)履行服务\n贸易领域\t开放承诺 \x07x03'
>>> for c in string:
... print(ord(c))
...
12288
12288
65288
19977
65289
23653
34892
26381
21153
10
36152
26131
39046
22495
9
24320
25918
25215
35834
32
7
120
48
51
(我不确定“\ ax03”部分的用途是什么 - 它可能是“\ x03”的拼写错误吗?)
当你尝试
re.sub("\\[a-z0-9]+", "", string)
它使用的是实际的反斜杠,后跟数字。
您需要做的是以转义格式提供要删除的字符:
re.sub("[\u3000\t\n\ax03]", "", string)
返回:
'(三)履行服务贸易领域开放承诺 '